2017-07-31 42 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"