gpt4 book ai didi

c# - PInvoke 不平衡堆栈

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:05 24 4
gpt4 key购买 nike

下午好

我一直在研究可以使用 CORBA 与网络感知应用程序通信的 dll。如果我将它作为 C++ 控制台应用程序运行,代码工作正常。但是,我一直坚持将方法导出为 dll。这些方法似乎可以很好地导出,如果我调用一个没有参数的方法,它就会按预期工作。我挂断了将 C# 字符串传递给 C++ 方法的问题。

我的 C++ 方法 header 如下所示:

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。

提前致谢

吉瓦

最佳答案

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

extern "C"bool __declspec(dllexport) __stdcall SpiceStart(char* installPath)

关于c# - PInvoke 不平衡堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com