【发布时间】:2010-04-24 23:29:51
【问题描述】:
下午好,
我一直在研究一个可以使用 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。
提前致谢,
贾瓦
【问题讨论】: