将程序从Linux移植到Windows:使用cstr

时间:2017-07-31 14:59:36

标签: c++ linux string windows-10 porting

我试图将程序从Linux移植到Windows 10.我有源代码,并且引用了类型" cstr"如下:

cstr filename = sourceline->sourcefile;

我不认为Windows SDK定义了这种类型(在代码中标记为未定义)。我可以用标准C ++字符串定义替换它,如:

std::string filename;

或者cstr还有其他我不知道的属性吗?

1 个答案:

答案 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"