我的问题是,我在 DLL 中有一些函数,其中一些函数例如:
#include <string>
using namespace std;
extern "C" __declspec(dllexport) string __cdecl encryption(string s)
{
return s;
}
每当我尝试从 C# 调用此函数时,这里是我使用的代码:
[DllImport("Packer.dll", EntryPoint = "encryption")]
static extern string encryption(string s);
我得到一个错误: 对 PInvoke 函数“Packer”的调用使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
我猜我得到这个错误是因为我没有正确的函数声明 任何人都可以指导我如何解决这个问题,在此先感谢
最佳答案
std::string
不能与 PInvoke 一起使用,因为 C++ 没有为其对象提供正确清理堆栈、复制对象等所需的 ABI。这是最棒的之一C++ 的痛苦。
您必须使用 char*
指针和纯 C API。简而言之,PInvoke 不适用于 C++。
关于c# - C++中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666821/