конвертировать стандартную строку C ++ в строку ^ - PullRequest
1 голос
/ 22 декабря 2011

Я хочу преобразовать в std :: string в System :: String ^ в среде Visual C ++. Я знаю, что мы можем преобразовать System :: String в std :: string с помощью функции MarshalString, как показано ниже:

void MarshalString ( String ^ s, string& os ) {
    using namespace Runtime::InteropServices;
    const char* chars = 
        (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
    os = chars;
    Marshal::FreeHGlobal(IntPtr((void*)chars));
}

Я не могу найти способ преобразования std :: string в System :: String, но я обнаружил, что System :: String имеет конструктор с аргументом, как показано ниже:

System::String(Char* value, Int32 startIndex, Int32 length)

и я пытаюсь использовать код, как показано ниже, но он не может дать мне правильное решение:

std::string str1 = "MyString";
System::String^ str = new System::String(str1.c_str(), 0, str1.length());

Что случилось с моим кодом?

1 Ответ

6 голосов
/ 22 декабря 2011

Microsoft предоставляет Visual Studio C ++ Support Library для облегчения взаимодействия между C ++ и C ++ / CLI. Эта библиотека предоставляет шаблонную функцию marshal_as, которая преобразует std::string в System::String^ для вас:

#include <msclr\marshal_cppstd.h>

std::string stdString;
System::String^ systemString = msclr::interop::marshal_as<System::String^>(stdString);
...