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)
任何想法表示赞赏!
您的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 ++客户端提供了头文件,您可以检查该头文件以验证签名?
归档时间: |
|
查看次数: |
4413 次 |
最近记录: |