嗨,我有创建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/

10-17 02:16