簡單說明VS2003 UNICODE字符的使用方法
以下就是我總結的簡單的實例. 此時VS2003 UNICODE字符用的參數類型為wchar_t* 類型, MFC應用程序調用此VS2003 UNICODE字符后編譯同過, 但不能連接.所以要相上用上面提到的解決方案了。
在此簡單說明一下設置使用VS2003 UNICODE字符集的方法:
選擇項目屬性的"C/C++"=>"預處理器"右邊的"預處理器定義"中添加_UNICODE;UNICODE;如果是MFC項目,在項目屬性的"連接器"=>"高級"中的"入口點"處加上wWinMainCRTStartup
以上操作后項目就使用UNICODE字符集.此時TCHAR不是原來的char類型,而是wchar_t類型,LPCTSTR也是wchar_t*類型了.(更多有關UNICODE編程問題可以查看http://www.vckbase.com/document/viewdoc/?id=642)
回到原文.在MSDN中的LNK2019錯誤信息的說明后,發現MFC項目默認設置了/Zc:wchar_t編譯選項.但Console項目中默認是不設置此項的.解決方案:在項目屬性"C/C++"=>"語言"中的"將wchar_t視為內置類型"上選擇"否".之后編譯連接OK.
在此給出實例代碼:
- DLL中的導出函數聲名
- int __declspec(dllexport) FindFile( LPCTSTR lpFileName );
- 在MFC項目中要用到以上DLL中聲名的函數.(MFC項目已設置為UNICODE)
- FindFile( _T( "FileName" ) );
工作需要做了一個使用UNICODE字符集的DLL庫.應用程序用MFC庫,也使用了UNICODE字符集.但在編譯連接的時候總是發生LNK2019的錯誤.但在Console項目中是沒有此錯誤的.重新檢查了所有項目的屬性,是否正確設置為使用UNICODE字符集#t#
有四種VS2003 UNICODE字符標準化表單。最重要的是標準化表單 C,因為它是用于萬維網的字符模型的最常用表單。Macromedia 提供其他三種 Unicode 標準化表單作為補充。
在 Unicode 中,有些字符看上去很相似,但可用不同的方法存儲在文檔中。
例如,“”(e 變音符)可表示為單個字符“e 變音符”,或兩個字符“正常拉丁語 e”+“組合變音符”。Unicode 組合字符是與前一個字符結合使用的字符,因此變音符會顯示在“拉丁語 e”的上方。這兩種形式都顯示為相同的印刷樣式,但保存在文件中的每種形式是不同的。
標準化是指確保可用不同形式保存的所有字符都使用相同的形式進行保存的過程。即,文檔中所有“”字符都保存為單個“e 變音符”或“e”+“組合變音符”,而不是在一個文檔中保存為這兩種形式。
我特意注意了下,相同代碼內容的兩個文檔,使用了BOM的文檔字節比未使用的文檔字節多3個字節。