C# PInvoke使堆栈不平衡
下午好 我一直在开发一个dll,它可以使用CORBA与网络感知的应用程序进行通信。如果我把它作为C++控制台应用程序运行,代码就可以工作。但是,我一直坚持将这些方法导出为dll。这些方法似乎可以很好地导出,如果我调用一个没有参数的方法,那么它就可以正常工作。把C字符串传递给C++方法我很生气。C# PInvoke使堆栈不平衡,c#,c++,dll,pinvoke,C#,C++,Dll,Pinvoke,下午好 我一直在开发一个dll,它可以使用CORBA与网络感知的应用程序进行通信。如果我把它作为C++控制台应用程序运行,代码就可以工作。但是,我一直坚持将这些方法导出为dll。这些方法似乎可以很好地导出,如果我调用一个没有参数的方法,那么它就可以正常工作。把C字符串传递给C++方法我很生气。 我的C++方法头看起来像这样: bool __declspec(dllexport) SpiceStart(char* installPath) 我的C#DLL导入代码如下: [DllImportAtt
我的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会引发异常“PinvokeStackDistancert”,这“可能是因为托管PInvoke签名与非托管目标签名不匹配。”
有人有什么建议吗?如果我从参数中删除char*和string,那么该方法运行良好。但是,我希望能够将应用程序的安装路径从C#传递到dll
提前感谢,
Giawa呼叫约定不匹配。在C++中,用STDCULL调用约定声明函数:
外部“C”bool\u declspec(dllexport)\u stdcall SpiceStart(char*installPath)+1。或者在DllImportAttribute.Perfect中指定调用约定-完成了任务!谢谢