如何将_bstr_t转换为System :: String

时间:2011-11-17 14:52:18

标签: c++-cli string-conversion

首先,我是 C ++ / CLI 的新手。

在做了一些研究之后,我发现我可以使用Marshal::PtrToStringBSTRIntPtr转换为System::String。那么,有没有办法将我的_bstr_t变量转换为IntPtr,以便我可以将其传递给上述函数并进行转换?

或者,

_bstr_t变量转换为System::String的正确方法是什么?

3 个答案:

答案 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()));
}