我正在尝试将一个程序从 Linux 移植到 Windows 10。我有源代码,并且有对“cstr”类型的引用,如下所示:
cstr filename = sourceline->sourcefile;
我不认为 Windows SDK 定义了这种类型(它在代码中被标记为未定义)。我可以将它替换为标准的 C++ 字符串定义,例如:
std::string filename;
或者 cstr 是否有其他我不知道的属性?
最佳答案
我不知道你的 cstr
类型的细节。但是,当您将代码移植到 Windows 时,您应该注意文件名字符串,尤其是它们的编码。
在 Linux 上使用 UTF-8 很常见;但在 Windows 上,Win32 API 中使用的 “ native ” Unicode 编码是 UTF-16。所以,如果你使用 std::string
在你的 Linux C++ 代码中存储 UTF-8 编码的字符串,你应该记得在 Windows 上将它们从 UTF-8 转换为 UTF-16,然后再将它们传递给Win32 API。
您可以在特定于 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"感兴趣。
关于c++ - 将程序从 Linux 移植到 Windows : Using cstr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45419266/