c# - C++中的字符串?

标签 c# c++ string pinvoke

我的问题是,我在 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/

相关文章:

c# - 如何在 .NET Core 3.1.0 中使用 ACL 在 Mac OS 上管理文件夹权限

c# - 如何强制用户在 Visual Studio for C# 中记录类成员?

c++ - 创建具有所有语义类型的 Direct3D 顶点是否会降低性能?

c++ - 如何解决 for 循环中的差一问题

string - 如何找到scala.MatchError的来源?

c# - 从 C# 上传 zip 文件到 S3

c# - BsonSerializer.Deserialize<T>(bsonDocument) - 子对象的 Id 字段导致异常

c++ - 尝试访问 std::stack 的索引

c++ - 没有 getline 的重载函数实例

C++11 内部 std::string 表示 (libstdc++)