转换C++;字符串/wchar_t*到C#字符串? 问题:我需要从C++可执行文件调用一个c*ydll。 我使用COM,它可以很好地处理int、long和bool。但我不能让一条绳子走

转换C++;字符串/wchar_t*到C#字符串? 问题:我需要从C++可执行文件调用一个c*ydll。 我使用COM,它可以很好地处理int、long和bool。但我不能让一条绳子走,c#,c++,string,com,com-interop,C#,C++,String,Com,Com Interop,IDL文件说这是一个BSTR,但我无法正确地传递它,也无法检索它。 我尝试使用wchar_t*和sysalloc,就像我在VB6中所做的那样,但这似乎不起作用 有人知道怎么做,或者可能出了什么问题吗?如果您使用ATL,您可以这样做: std::string theString = "hello"; CComBSTR bstr(theString.c_str()); DoSomething(bstr); // Function that takes a BSTR as an argument

IDL文件说这是一个BSTR,但我无法正确地传递它,也无法检索它。 我尝试使用wchar_t*和sysalloc,就像我在VB6中所做的那样,但这似乎不起作用


有人知道怎么做,或者可能出了什么问题吗?

如果您使用ATL,您可以这样做:

std::string theString = "hello";
CComBSTR bstr(theString.c_str());
DoSomething(bstr);  // Function that takes a BSTR as an argument
或如果没有ATL:

const wchar_t* theString = L"hello";
BSTR bstr = SysAllocString(theString);
DoSomething(bstr);
SysFreeString(bstr);

使用
SysAllocString
wchar\u t*
转到
BSTR
当然是正确的路线。你能详细说明你这样做的时候出了什么问题吗?编译错误、运行时异常等等……我在C#中什么也得不到,只得到问号。