我想将ComboBox的内容保存到文件中。下面的代码正确显示带有“Marker 4”的MessageBox(ComboBox中的文本),但保存的文件包含“03038D8C”而不是“Marker 4”,我想这是变量的内存地址或类似的东西?如何正确地将“Marker 4”-string输出到文件?
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 :(得分:1)
问题是你正在使用带有宽字符串的窄流。使用std::wofstream
代替std::ofstream
,它应该可以正常工作。
话虽如此,我同意@jonsca - 为什么将iostream拖入C ++ / CLI应用程序?
答案 1 :(得分:0)
我不确定您的应用程序的要求,但您是否考虑使用函数的.NET“等价物”,例如System::IO::Directory
方法(特别是GetFiles
代替FindFirstFile
),System::IO::StreamWriter
代替ofstream
对象?这样,本节中的代码就会与代码的CLR部分相吻合。
我知道这并不是你所要求的,但我觉得你的代码中的指针可能需要以不同的方式处理,而且我不确定是否必须跨托管/非托管屏障进行编组。
答案 2 :(得分:0)
我最终将System::String^
转换为std:str
并直接插入(而不是将其转换为wchar_t
)。
本机c ++和CLI之间的混合是因为我正在构建一个以原生c ++构建的SDK示例,但是想要向它添加一个表单(在Visual Studio 2008中),这将它变成了这种“混合”。我意识到这不是最佳的,但到目前为止,似乎工作:-)!如果我遇到更多错误,我将尝试仅使用CLI等效项。谢谢你的帮助!