通过C#';字符串';在C++dll中作为';字符**';

本文关键字:字符 字符串 通过 C++dll | 更新日期: 2023-09-27 18:00:28

嗨,我已经创建了c++函数作为

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

在C#中,dll接口看起来像:

GetPRM(char* BString)

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

通过C#';字符串';在C++dll中作为';字符**';

您应该能够使用

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

但是,如果C++方法未声明为静态,则这不会考虑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)