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

Han*_*urg 2 c# c++ dll interop

我正在尝试从C#调用外部.dll函数。dll的文档定义了以下功能:

int funcName(int *retVal)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种配置,并且总是尝试从p / invoke获得不平衡的堆栈错误。我的C#代码当前如下所示:

[DLLImport("dllName");
unsafe static extern int funcName(ref IntPtr retVal);
unsafe IntPtr retNum;
int status = funcName(ref retNum);
Run Code Online (Sandbox Code Playgroud)

任何想法表示赞赏!

Ben*_*igt 5

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

  • ref Int32是的正确匹配int*

  • IntPtr 也可以工作。

  • ref IntPtr会是int**。绝对不是您想要的。

使用

[DLLImport("dllName")]
static extern int funcName(ref Int32 retVal);
Run Code Online (Sandbox Code Playgroud)

还要确保调用约定匹配。在不使用显式调用约定的情况下,切勿在C或C ++中使用dllexport,然后C#DllImport需要具有匹配的约定。

通常,C ++中的原型应为

extern "C" int __stdcall funcName(int* arg);
Run Code Online (Sandbox Code Playgroud)

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