我试图端口一个程序在Linux到Windows 10,我有来源,并有该类型“CSTR”引用如下所示:移植计划从Linux到Windows中:使用CSTR
cstr filename = sourceline->sourcefile;
我不认为Windows SDK定义了这种类型(在代码中标记为未定义)。我是否可以用标准C++字符串定义替换它:
std::string filename;
或者cstr还有其他我不知道的属性?
我试图端口一个程序在Linux到Windows 10,我有来源,并有该类型“CSTR”引用如下所示:移植计划从Linux到Windows中:使用CSTR
cstr filename = sourceline->sourcefile;
我不认为Windows SDK定义了这种类型(在代码中标记为未定义)。我是否可以用标准C++字符串定义替换它:
std::string filename;
或者cstr还有其他我不知道的属性?
我不知道你的cstr
类型的细节。但是,将代码移植到Windows时,应注意文件名字符串,特别是编码。
在Linux上使用UTF-8是很常见的;但在Windows上,“本机” Win32 API中使用的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"。
你为什么不通过查找原始平台上的'cstr' *实际上是什么? (这不是标准类型) –
您能确定'cstr'的定义来自哪里吗? –
我实际上找不到它:它没有在gcc库引用中列出,并且当我谷歌它时,我得到关于c_str和CStr的讨论,这是不一样的。我希望这里有人知道它来自哪里。 – Nester