Символ не сохраняется в файл правильно - PullRequest
3 голосов
/ 03 апреля 2011

Я хочу сохранить содержимое ComboBox в файл.Приведенный ниже код правильно показывает MessageBox с «Маркер 4» (текст в ComboBox), но сохраненный файл содержит «03038D8C» вместо «Маркер 4», я думаю, это адрес памяти переменной или что-то подобное?Как я могу правильно вывести строку «Маркер 4» в файл?

private: System::Windows::Forms::ComboBox^  cmbMarker;
private: System::String^ strMarkerText; 

...

strMarkerText = this->cmbMarker->Text;

...

ofstream myfile;

WIN32_FIND_DATA data;
pin_ptr<const wchar_t> wname = PtrToStringChars(strMarkerText);
FindFirstFile(wname, &data);

::MessageBox(0, wname, L"Marker inserted", MB_OK);

myfile <<"=====MARKER '" << wname << "' INSERTED AT " << datetime << " =====" << endl;

[Возможно, в этом фрагменте содержится нечто большее, чем я, я не из C ++ / CLI, но ценю вашеПомогите!Нет ошибок компилятора, и код работает нормально, за исключением проблемы, описанной выше, то есть, что в файл записывается не текстовое содержимое открытого текста («Маркер 4»), а «03038D8C».]

Спасибо,
Ник

Ответы [ 3 ]

1 голос
/ 03 апреля 2011

Проблема в том, что вы используете узкий поток с широкой строкой. Используйте std::wofstream вместо std::ofstream, и оно должно работать нормально.

При этом я согласен с @jonsca - зачем перетаскивать iostreams в приложение C ++ / CLI?

0 голосов
/ 03 апреля 2011

Я закончил преобразование System::String^ в std:str и напрямую вставил это (вместо того, чтобы преобразовать его в wchar_t).

Сочетание нативного c ++ и CLI связано соснованный на SDK-примере, встроенном в нативный c ++, но хотел добавить к нему форму (в Visual Studio 2008), что превратило его в этот «микс».Я понимаю, что это не оптимально, но пока, похоже, работает :-)!Я постараюсь использовать CLI-эквиваленты, только если столкнусь с дальнейшими ошибками.Спасибо за вашу помощь!

0 голосов
/ 03 апреля 2011

Я не уверен в требованиях вашего приложения, но рассматривали ли вы вопрос об использовании .NET "эквивалентов" функций, таких как System::IO::Directory методы (в частности, GetFiles вместо FindFirstFile) и System::IO::StreamWriter вместо объекта ofstream?Таким образом, код в этом разделе сочетается с частью CLR вашего кода.

Я знаю, что это не совсем то, что вы просили, но у меня есть ощущение, что указатель в вашем коде, возможно, придется обрабатывать по-другомуи я не уверен, придется ли маршалировать через управляемый / неуправляемый барьер.

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