wstring to string
От: uni Россия  
Дата: 11.04.14 16:23
Оценка:
Доброго. Мне нужно преобразовать String^ в string. Делаю это так:

wstring wstr;
string str;

// String^ -> const wchar_t *.
pin_ptr< const wchar_t > ptr = PtrToStringChars( gcstr );

// const wchar_t * -> wstring.
wstr = ptr;

// wstring -> string
str.assign( wstr.begin(), wstr.end() );


Но это неправильный метод, т.к. str.assign() для не ansi символов вернёт белиберду. На so извращаются по-разному и мне хотелось бы узнать, а нет ли какого уже устоявшегося варианта преобразования wstring в string для C++/CLI? Меня интересует более менее короткий вариант преобразования из двухбайтового в однобайтовое представление. Если можно, не сильно углубляясь в WinAPI, а какими-нибудь библиотечными функциями. Пишут про использование marshal_as, но я не могу эту обёртку использовать, т.к. вылезает куча конфликтов имён C++ и .Net при подключении необходимых заголовочников.
Re: wstring to string
От: uzhas Ниоткуда  
Дата: 11.04.14 17:14
Оценка:
Здравствуйте, uni, Вы писали:

uni>Пишут про использование marshal_as, но я не могу эту обёртку использовать, т.к. вылезает куча конфликтов имён C++ и .Net при подключении необходимых заголовочников.


решай проблемы с конфликтами
например, вытащи эти функции в отдельный файл и сделай свои обертки
//convert.h
std::string MyConvert(String^ source);



//convert.cpp
std::string MyConvert(String^ source)
{
  return msclr::interop::marshal_as<std::string, String^>(source);
}
Re[2]: wstring to string
От: uni Россия  
Дата: 11.04.14 18:01
Оценка:
Спасибо, тоже вариант. Он работает. Пусть пока так. На разрешение конфликтов управляемого и неуправляемого пространств у меня не достаточно опыта в C++/CLI.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.