Вам нужно сделать две вещи, чтобы преобразовать System::String
в std::string
:
- Маршал памяти из управляемой кучи неуправляемой.
- Преобразуйте кодировку символов из широких символов в (как выглядит из вашего вопроса) в символы ANSI.
Одним из способов, не беспокоясь об освобождении памяти HGlobal, является определение метода в соответствии с:
interior_ptr<unsigned char> GetAsciiString(System::String ^s)
{
array<unsigned char> ^chars = System::Text::Encoding::ASCII->GetBytes(s);
return &chars[0];
// of course you'd want to do some error checking for string length, nulls, etc..
}
И вы бы использовали это как:
// somewhere else...
{
pin_ptr<unsigned char> pChars = GetAsciiString(textBox1->Text);
std:string std_str(pChars); // I don't have my compiler in front of me, so you may need a (char*)pChars
}
Это также позволяет вам использовать кодировку по вашему выбору (например, utf-8 вместо ascii), но вам это может не понадобиться.