需要连接到 C++ DLL

Posted

技术标签:

【中文标题】需要连接到 C++ DLL【英文标题】:Need to interface to a C++ DLL 【发布时间】:2010-05-05 15:58:07 【问题描述】:

我需要从 C# 调用 C++ API。我已经能够调用 API,但 char[] 参数似乎没有正确编组。 这是 C++ 签名:

Create2ptModel(double modelPowers[2], 
               double modelDacs[2], 
               int pclRange[2],
               double targetPowers[32], 
               double *dacAdjustFactor,
               unsigned short powerRampFactors[32], 
               BOOL bPCLDacAdjusted[32],
               char calibrationModel[32],
               char errMsg[1024])

这就是我尝试从 C# 调用它的方式

[DllImport("AlgorithmsLib.dll", EntryPoint = "_Create2ptModel@36", 
 ExactSpelling = true, CallingConvention = CallingConvention.StdCall, 
 CharSet = CharSet.Auto)]
private static extern AlgorithmStatus Create2ptModel(
    double[] modelPowers, 
    double[] modelDacs, 
    int[] pclRange, 
    double[] targetPowers, 
    ref double dacAdjustFactor, 
    ushort[] powerRampFactors, 
    bool[] bPCLDacAdjusted, 
    /**/char[] calibrationModel, 
    char[] errMsg/**/);

知道如何正确编组它吗? 提前致谢!

【问题讨论】:

C#中calibrationModel左边的两个星号是错字吗? 我认为他试图突出它们。我已经格式化了代码。 【参考方案1】:

    不要使用CharSet.Auto 你知道库的字符集,使用它。如果你让机器猜测,它可能会猜错。

    那些char[] 参数是否以空值终止?它们是输入还是输出?如果它们是以 null 结尾的输入,则只需使用 string 而不是 char[]

【讨论】:

这是正确的。 CharSet.Ansi 是必需的,char[] 必须是字符串。

以上是关于需要连接到 C++ DLL的主要内容,如果未能解决你的问题,请参考以下文章

Python在主机程序初始化后连接到C++ dll?

C++ 客户端通过 SSL 连接到 IBM MQ

谷歌视觉连接到 API 没有外部谷歌 DLL

从 C++ 调用 C# dll

visual studio 2008 c++ 中怎样添加动态链接库?

使用 PInvoke 连接 C/C++ DLL 的调试断言失败