Как конфертировать из _bstr_t в System :: String - PullRequest
1 голос
/ 17 ноября 2011

Во-первых, я немного новичок в C ++ / CLI .

После некоторых исследований я обнаружил, что могу использовать Marshal::PtrToStringBSTR для преобразования IntPtr вSystem::String.Итак, есть ли способ преобразовать мою _bstr_t переменную в IntPtr, чтобы я мог передать ее упомянутой функции и выполнить преобразование?

Или

Что является правильнымспособ преобразования _bstr_t переменной в System::String?

Ответы [ 3 ]

6 голосов
/ 17 ноября 2011

System :: String имеет конструктор, который принимает wchar_t *.Что делает этот код работоспособным:

_bstr_t bs(L"Hello world");
String^ ss = gcnew String(bs.GetBSTR(), 0, bs.length());

Передача length () обеспечивает правильную обработку встроенных нулей.Если вас это не волнует, вы можете просто использовать gcnew String (bs.GetBSTR ());

3 голосов
/ 17 ноября 2011

Вы должны иметь возможность использовать marshal_as, чтобы получить System::String.

marshal_as<System::String^>(value);

Вот страница MSDN для различных типов строк: http://msdn.microsoft.com/en-us/library/bb384865.aspx

Самое главное - обратить внимание на правильный #include в зависимости от типа вашей строки.

0 голосов
/ 18 ноября 2011

Мне удалось найти решение, как я упомянул, используя Marshal::PtrToStringBSTR.Вот что я сделал:

void SomeFunction( String^% str )
{
    _bstr_t bs(L"Hello world");
    str = Marshal::PtrToStringBSTR(
          static_cast<IntPtr>( bs.GetAddress()));
}
...