gpt4 book ai didi

c# - 在 C++ dll 中将 C# 'string' 作为 'Char*' 传递

转载 作者:行者123 更新时间:2023-11-30 03:51:42 26 4
gpt4 key购买 nike

您好,我已经创建了 C++ 函数作为

void MyClass::GetPRM(BSTR BString)
{
//----
}

在 C# 中,dll 接口(interface)如下所示:

GetPRM(char* BString)

我的问题是如何将字符串作为 char* 从 C# 传递到 C++ DLL?我试过做void MyClass::GetPRM(std::string BString) 但运气不好。任何建议

最佳答案

你应该可以使用

 [DllImport("mycppdll", EntryPoint="MyClass_GetPRM")]
extern static void GetPRM([MarshalAs(UnmanagedType.BStr)] string BString)

但是,如果该方法未声明为静态,则不会考虑 C++ 名称修改,也不会考虑 C++ 方法的 this 指针。

在 C 端,您可能需要这样的包装函数:

 extern "C" __declspec(dllexport) void __stdcall
MyClass_GetPRM(BSTR BString)
{
MyClass::GetPRM(BString);
}

这将需要调整 C# 声明以匹配导出的名称:

 [DllImport("mycppdll", EntryPoint="MyClass_GetPRM")]
extern static void GetPRM([MarshalAs(UnmanagedType.BStr)] string BString)

关于c# - 在 C++ dll 中将 C# 'string' 作为 'Char*' 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31127212/

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