我正在尝试从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);
感谢任何想法!
答案 0 :(得分:4)
您的p / invoke声明的参数类型错误。
ref Int32
是int*
的正确匹配。
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 ++客户端提供的头文件,您可以检查以验证签名?