C++ cli 字符未正确保存到文件
我想将组合框的内容保存到文件中。下面的代码正确地显示了带有“Marker 4”(组合框中的文本)的消息框,但保存的文件包含“03038D8C”而不是“Marker 4”,我想这是变量的内存地址还是类似的?如何将“Marker 4”-字符串正确输出到文件C++ cli 字符未正确保存到文件,c++-cli,C++ Cli,我想将组合框的内容保存到文件中。下面的代码正确地显示了带有“Marker 4”(组合框中的文本)的消息框,但保存的文件包含“03038D8C”而不是“Marker 4”,我想这是变量的内存地址还是类似的?如何将“Marker 4”-字符串正确输出到文件 private: System::Windows::Forms::ComboBox^ cmbMarker; private: System::String^ strMarkerText; ... strMarkerText = this-
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;
private:System::Windows::Forms::ComboBox^cmbMarker;
private:System::String^strMarkerText;
...
strMarkerText=此->标记->文本;
...
流文件;
WIN32_查找_数据;
pin_ptr wname=PtrToStringChars(strmarktext);
FindFirstFile(wname和数据);
::MessageBox(0,wname,L“已插入标记”,MB_OK);
myfile我不确定您的应用程序的要求,但是您是否考虑过使用.NET函数的“等价物”,如System::IO::Directory
方法(特别是GetFiles
代替FindFirstFile
),以及System::IO::StreamWriter
代替stream
对象的?这样,本节中的代码将与代码的CLR部分协调
我知道这并不是您想要的,但我感觉代码中的指针可能需要以不同的方式处理,我不确定是否需要跨托管/非托管屏障封送 问题是您使用的是窄流和宽字符串。使用std::wofstream
代替std::ofstream
,它应该可以正常工作
话虽如此,我同意@jonsca——为什么要将iostreams拖到C++/CLI应用程序中?我最终将System::String^
转换为std:str
,并直接插入它(而不是将其转换为wchar\t
)
本地C++和CLI之间的混合是因为我在构建了一个在本地C++中构建的SDK示例,但是希望在它(VisualStudio 2008)中添加一个表单,将其转换成“混合”。我意识到这不是最优的,但到目前为止,它似乎是有效的:-)!我将尝试仅在以后遇到任何错误时使用CLI等价物。谢谢你的帮助
我认为使用c++-cli
标记会更幸运是的,我刚刚意识到这不是本地的C++,但包含了微软的一些奇妙的童话灰尘:-!谢谢你的编辑!