使用整数指针从C#调用外部DLL

时间:2014-04-27 16:07:23

标签: c# c++ dll interop

我正在尝试从c#调用外部.dll函数。 dll的doc定义了函数:

int funcName(int *retVal)

我尝试过各种配置,并且总是来自p / invoke的不平衡堆栈错误;我的c#代码目前看起来像这样:

[DLLImport("dllName");
unsafe static extern int funcName(ref IntPtr retVal);
unsafe IntPtr retNum;
int status = funcName(ref retNum);

感谢任何想法!

1 个答案:

答案 0 :(得分:4)

您的p / invoke声明的参数类型错误。

  • ref Int32int*的正确匹配。

  • IntPtr也可以。

  • ref IntPtr将是int**。绝对不是你想要的。

使用

[DLLImport("dllName")]
static extern int funcName(ref Int32 retVal);

还要确保调用约定匹配。如果不使用显式调用约定,则不应在C或C ++中使用dllexport,然后C#DllImport需要具有匹配约定。

一般来说,C ++中的原型应该是

extern "C" int __stdcall funcName(int* arg);

是否有为C和C ++客户端提供的头文件,您可以检查以验证签名?