2011-04-03 48 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应用程序?