Как мне конвертировать const wchar_t* в System::String?

Мне нужно преобразовать мой SHA1 (wchar_t*) в обычную строку ^, чтобы использовать его в определенной функции. Есть идеи? Я попробовал Google, но все результаты были прямо противоположны моему вопросу.:\

ПРИМЕЧАНИЕ. Я использую C++.NET Framework и приложения Windows Forms.

3 ответа

Решение

Используйте конструктор; как это:

const wchar_t* const pStr1 = ...;
System::String^ const str1 = gcnew System::String(pStr1);

const char* const pStr2 = ...;
System::String^ const str2 = gcnew System::String(pStr2);

Если вы используете стандартные строковые классы C++ (std::wstring или же std::string), вы можете получить указатель с c_str() метод. Ваш код тогда может быть

const std::wstring const std_str1 = ...;
System::String^ const str1 = gcnew System::String(std_str1.c_str());

Смотрите System.String и подробное обсуждение здесь.

Вы также можете попробовать:

#include <msclr\marshal_cppstd.h>

...

String^ managedString = msclr::interop::marshal_as<String^>(/* std::string or wchar_t * or const wchar_t * */);

Вы можете обратиться к разделу Обзор Marshaling в C++ для всех поддерживаемых типов, которые вы можете использовать

Если при выполнении решения Дэна вы получаете ошибку cannot convert parameter 1 from 'std::string' to 'const wchar_t *'тогда вы задаете не тот вопрос. Вместо того, чтобы спрашивать, как конвертировать wchar_t* в String^, вы должны спросить, как конвертировать std::string в String^,

Используйте встроенный c_str функция, чтобы получить равнину char* вне std::stringи передать это конструктору.

std::string unmanaged = ...;
String^ managed = gcnew String(unmanaged.c_str());
Другие вопросы по тегам