2017-07-31 128 views
0

我试图端口一个程序在Linux到Windows 10,我有来源,并有该类型“CSTR”引用如下所示:移植计划从Linux到Windows中:使用CSTR

cstr filename = sourceline->sourcefile; 

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

std::string filename; 

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

+3

你为什么不通过查找原始平台上的'cstr' *实际上是什么? (这不是标准类型) –

+3

您能确定'cstr'的​​定义来自哪里吗? –

+0

我实际上找不到它:它没有在gcc库引用中列出,并且当我谷歌它时,我得到关于c_str和CStr的讨论,这是不一样的。我希望这里有人知道它来自哪里。 – Nester

回答

0

我不知道你的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"