下午好,
我一直在开发一个dll,可以使用CORBA与网络感知应用程序通信。如果我将代码作为C++控制台应用程序运行,则代码可以正常工作。但是,我卡在了将方法导出为dll上。方法似乎已经成功导出,如果我调用不带参数的方法,则它按预期工作。我遇到了将C#字符串传递给C++方法的问题。
我的C++方法头看起来像这样:
我一直在开发一个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会引发"PInvokeStackImbalance"异常,这可能是因为托管的PInvoke签名与非托管的目标签名不匹配。
有人有什么建议吗?如果我从参数中删除char*和string,则该方法可以正常运行。但是,我想能够从C#将应用程序的安装路径传递给dll。
提前感谢,
Giawa