我們正在將我們的C++ COM應用程序遷移爲unicode,並且作爲此遷移的一部分,我們還希望將IDL中的常量字符串遷移到unicode。如何在IDL中減少寬字符常量
問題是,目前我們仍然使用ANSI和UNICODE編譯它,這意味着我們不能使用L「String」構造來聲明寬圖表。
目前,我們的字符串常量定義是這樣的:
常量LPSTR STRING_CONST_NAME = 「字符串值」;
我們要定義這樣的:
常量LP 牛逼 STR STRING_CONST_NAME = 「字符串值」;
如果它是常規代碼中的Unicode
但是從編譯時,我們只需添加_T(「字符串值」)宏這將它轉換爲L「字符串值」我所看到的,我們可以」不要在IDL中使用它,因爲_T是一個純粹的C++構造。
我們的方法是否正確?可能是我們應該把它定義這樣不管是什麼:
常量LP 牛逼 STR STRING_CONST_NAME = 大號「字符串值」;
我們將它們定義爲const,因爲我們稍後在API的其他地方使用它們。 我們的許多API方法接受這些字符串作爲參數,並且在COM api中定義它們更容易一些,並且稍後在它的所有客戶端中使用它們。 我會檢查一下將它們定義爲BSTR的觀點,這可能是我們從一開始就犯的錯誤。 – 2009-08-23 09:03:45
我會考慮將它們定義爲BSTR一個錯誤 - BSTRs _must_使用SysAllocString分配。字面寬字符字符串不是有效的BSTR,因爲它們不能以長度爲前綴。 – 2009-08-23 19:25:16