Преобразование между управляемым и неуправляемым кодом - PullRequest
0 голосов
/ 19 июня 2011

Мне было интересно, допустимо ли следующее для преобразования между управляемой строкой и стандартной строкой:

String ^ mymgdstring;
std::string mystdstring = *[PTR TO MYMGDSTRING, NOT SURE OF SYNTAX]

(т.е. создать строку std, равную разыменованному указателю на управляемую строку)

Если это не так, почему бы и нет? Каков наилучший метод (т. Е. Наиболее эффективный) для преобразования между ними?
Кроме того, как вы получаете указатель на управляемую строку?

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Копия необходима, поскольку данные .NET String можно перемещать во время сборки мусора.

Можно предположить, что marshal_as - наиболее эффективный способ выполнить это преобразование.Если будет найден более быстрый способ, marshal_as будет обновлен для его использования (это шаблон и может быть специализированным).

Вы можете получить внутренний указатель на данные System::String (это будетв Юникоде это внутренний формат строк .NET), используя PtrToStringChars.Чтобы использовать его с собственным кодом, сначала необходимо закрепить строку, используя pin_ptr вместо interior_ptr.

0 голосов
/ 19 июня 2011

C ++ / CLI поставляется с функцией MarshalAs, которая может выполнять преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...