我试图将程序从Linux移植到Windows 10.我有源代码,并且引用了类型" cstr"如下:
cstr filename = sourceline->sourcefile;
我不认为Windows SDK定义了这种类型(在代码中标记为未定义)。我可以用标准C ++字符串定义替换它,如:
std::string filename;
或者cstr还有其他我不知道的属性吗?
答案 0 :(得分:0)
我不知道您cstr
类型的详细信息。但是,当您将代码移植到Windows时,应注意文件名字符串,特别是 encoding 。
在Linux上使用UTF-8很常见;但在Windows上,Win32 API中使用的" native" Unicode编码为 UTF-16 。因此,如果您使用std::string
在Linux C ++代码中存储UTF-8编码的字符串,您应该记住在将它们转换为Win32 API之前,将它们从Windows上的UTF-8转换为UTF-16。
您可以在Windows特定的C ++代码中使用std::wstring
类(甚至是ATL的CStringW
类;您已在此处编写特定于平台的代码,因此使用非标准非特定于Windows的代码部分中的可移植类不应成为问题。)
跨平台 C ++代码的常见模式是在可移植的跨平台代码部分中使用UTF-8,并在Windows API边界转换为UTF-16。
此外,您可能会发现感兴趣的this MSDN Magazine article "Unicode Encoding Conversions with STL Strings and Win32 APIs"。