首先,我是 C ++ / CLI 的新手。
在做了一些研究之后,我发现我可以使用Marshal::PtrToStringBSTR
将IntPtr
转换为System::String
。那么,有没有办法将我的_bstr_t
变量转换为IntPtr
,以便我可以将其传递给上述函数并进行转换?
或者,
将_bstr_t
变量转换为System::String
的正确方法是什么?
答案 0 :(得分:6)
System :: String有一个带wchar_t *的构造函数。这使得此代码有效:
_bstr_t bs(L"Hello world");
String^ ss = gcnew String(bs.GetBSTR(), 0, bs.length());
传递length()可确保正确处理嵌入的零。如果你不关心那么你可以简单地使用gcnew String(bs.GetBSTR());
答案 1 :(得分:3)
您应该可以使用marshal_as
获取System::String
。
marshal_as<System::String^>(value);
以下是不同字符串类型的MSDN页面:http://msdn.microsoft.com/en-us/library/bb384865.aspx
最重要的是要注意正确的#include,具体取决于你的字符串类型。
答案 2 :(得分:0)
我设法通过我提到的方式找到了一个解决方案,使用Marshal::PtrToStringBSTR
。这就是我所做的:
void SomeFunction( String^% str )
{
_bstr_t bs(L"Hello world");
str = Marshal::PtrToStringBSTR(
static_cast<IntPtr>( bs.GetAddress()));
}