PInvoke使堆栈失衡

时间:2010-04-24 23:29:52

标签: c# c++ dll pinvoke

下午好,

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

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

bool __declspec(dllexport) SpiceStart(char* installPath)

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

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

我这样称呼方法:

bool success = SpiceStart(@"c:\sedatools");

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

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

提前致谢,

Giawa

1 个答案:

答案 0 :(得分:10)

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

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