C# 通过C&x27;字符串';在C++;dll作为';字符*'; 我创建了C++函数作为< /p> void MyClass::GetPRM(BSTR BString) { //---- }

C# 通过C&x27;字符串';在C++;dll作为';字符*'; 我创建了C++函数作为< /p> void MyClass::GetPRM(BSTR BString) { //---- },c#,c++,.net,C#,C++,.net,在C#中,dll接口如下所示: GetPRM(char* BString) 我的问题是如何将字符串作为C**从C++到C++? 我已经试过了 void MyClass::GetPRM(std::string BString)但运气不好。 任何建议您应该能够使用 [DllImport("mycppdll", EntryPoint="MyClass_GetPRM")] extern static void GetPRM([MarshalAs(UnmanagedType.BStr)] strin

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

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

您应该能够使用

 [DllImport("mycppdll", EntryPoint="MyClass_GetPRM")]
 extern static void GetPRM([MarshalAs(UnmanagedType.BStr)] string BString)
<>但是,如果C++没有声明C++,则不考虑C++名称的修改,也不考虑该方法< <代码> >指针。 在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++接口将使用字符串,而不是char *。参数数据类型是“char *”,如果C++函数也使用char *。你的C++函数采用BSTR,它是指向16位WHARGHT字符的字符串,而不是8位字符。你是想从C++调用C函数,还是试图调用C++中的C++函数?无论哪种方式,你都可能需要一个“C”函数而不是C++来互操作。