<分区>
Possible Duplicate:
pinvokestackimbalance — how can I fix this or turn it off?
我需要从 c# 代码访问一个 c++ dll 库(我没有源代码)。
例如以下函数:
UINT32 myfunc1()
UINT32 myfunc2(IN char * var1)
UINT32 myfunc3(IN char * var1, OUT UINT32 * var2)
对于 myfunc1 我使用下面的代码没有问题:
[DllImport("mydll.dll")]
public static extern int myfunc1();
另一方面,我无法使用 myfunc2 和 myfunc3。 对于 myfunc2,我尝试了以下方法:(以及许多其他人拼命尝试)
[DllImport("mydll.dll")]
public static extern int myfunc2(string var1);
[DllImport("mydll.dll")]
public static extern int myfunc2([MarshalAs(UnmanagedType.LPStr)] string var1);
[DllImport("mydll.dll")]
public static extern int myfunc2(char[] var1);
但是都报了如下错误:
“托管调试助手‘PInvokeStackImbalance’在‘C:\Users\....\myproject\bin\Debug\myproj.vshost.exe’中检测到问题。
附加信息:对 PInvoke 函数 'myproject!myproject.mydll::myfunc2'
的调用使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。”
请指导我应该做什么。