Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PInvoke使堆栈不平衡_C#_C++_Dll_Pinvoke - Fatal编程技术网

C# PInvoke使堆栈不平衡

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

下午好

我一直在开发一个dll,它可以使用CORBA与网络感知的应用程序进行通信。如果我把它作为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会引发异常“PinvokeStackDistancert”,这“可能是因为托管PInvoke签名与非托管目标签名不匹配。”

有人有什么建议吗?如果我从参数中删除char*和string,那么该方法运行良好。但是,我希望能够将应用程序的安装路径从C#传递到dll

提前感谢,


Giawa

呼叫约定不匹配。在C++中,用STDCULL调用约定声明函数:


外部“C”bool\u declspec(dllexport)\u stdcall SpiceStart(char*installPath)

+1。或者在DllImportAttribute.Perfect中指定调用约定-完成了任务!谢谢