2011-04-03 49 views
3

我想將組合框的內容保存到文件。下面的代碼正確地顯示了帶有「標記4」(ComboBox中的文本)的MessageBox,但保存的文件包含「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」。]

謝謝,
尼克

+0

我想你會有'C++ - cli'標籤的更多運氣。 :) – Xeo 2011-04-03 06:07:18

+0

是的,我只是意識到,這不是本機C++,但包含了一些微軟永遠美妙的仙塵:-)!感謝編輯! – Nick 2011-04-03 06:08:32

回答

0

我最終將System::String^轉換爲std:str並直接插入(而不是將其轉換爲wchar_t)。

本機C++和CLI之間的混合是因爲我構建在本機C++中構建的SDK示例上,但想要添加一個表單(在Visual Studio 2008中),該表單將其轉換爲「混合」 。我意識到這不是最佳的,但到目前爲止,它似乎工作:-)!如果我遇到更多錯誤,我會盡量只使用CLI等價物。謝謝你的幫助!

0

我不知道您的應用程序的要求,但你有沒有考慮使用的功能.NET「等價物」,如System::IO::Directory方法(代替FindFirstFile具體GetFiles),並在地方System::IO::StreamWriterofstream對象?通過這種方式,本節中的代碼將與您的代碼的CLR部分一起分享。

我知道這並不完全是你要求的,但我有一種感覺,你的代碼中的指針可能需要以不同的方式處理,而且我不確定是否必須在託管/非託管屏障上編組。

1

問題是,您正在使用寬字符串的窄流。使用std::wofstream而不是std::ofstream,它應該可以正常工作。

這就是說,我同意@jonsca - 爲什麼將iostreams拖入C++/CLI應用程序?