PInvoke使堆栈失衡

Gia*_*awa 5 c# c++ dll pinvoke

下午好,

我一直在研究一个可以使用CORBA与网络感知的应用程序通信的DLL.如果我将它作为C++控制台应用程序运行,代码工作正常.但是,我已经停止将方法导出为dll.这些方法似乎输出正常,如果我调用一个没有参数的方法,那么它按预期工作.我挂了把C#字符串传递给C++方法.

我的C++方法标题如下所示:

bool __declspec(dllexport) SpiceStart(char* installPath)
Run Code Online (Sandbox Code Playgroud)

我的C#DLL导入代码如下:

[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)]
private static extern bool SpiceStart(string installPath);
Run Code Online (Sandbox Code Playgroud)

我这样称呼方法:

bool success = SpiceStart(@"c:\sedatools");
Run Code Online (Sandbox Code Playgroud)

对SpiceStart的调用抛出异常"PInvokeStackImbalance","很可能是因为托管的PInvoke签名与非托管目标签名不匹配".

有没有人有什么建议?如果我从参数中删除char*和字符串,那么该方法运行正常.但是,我希望能够将应用程序的安装路径从C#传递给dll.

提前致谢,

Giawa

zum*_*ard 10

调用约定不匹配.在C++中,使用stdcall调用约定声明该函数:

extern"C"bool __declspec(dllexport)__ stdcall SpiceStart(char*installPath)

  • +1.或者在DllImportAttribute中指定调用约定. (3认同)