VC UNICODE程式設計設定

2021-05-25 05:26:52 字數 2087 閱讀 4635

記錄一下使用vc++6.0過程中遇到的問題及技巧:

最近將原來mbcs編碼的程式要改為unicode編碼,結果設定完成後編譯報錯:

msvcrtd.lib(crtexew.obj) : error lnk2001: unresolved external symbol _winmain@16

debug/test1.exe : fatal error lnk1120: 1 unresolved externals

error executing link.exe.

原因:unicode版的可執行程式的進入點是wwinmaincrtstartup,而不是預設的winmain。

解決辦法:

project——>settings...——>link——>category——>output,在entry-point symbol後輸入wwinmaincrtstartup

#

ifdef    unicode

#

pragma comment(linker,

"/entry:wwinmaincrtstartup"

)

#

endif

除了常見的函式轉換(multibytetowidechar和widechartomultibyte)和巨集轉換(atl巨集,如a2w、w2a、w2ca等)以外,下面再給出一種使用wsprintf函式的方法:

方法:tchar        sztstr[128] = _t("i am 中國人/n你呢?");

#ifdef unicode

char        szout[128];

wsprintfa(szout, "%ls", sztstr);    //%ls修飾符將sztstr視為pwstr

messageboxa(null, &szout[0],   "messageboxa", mb_ok);

messageboxw(      &sztstr[0], l"messageboxw", mb_ok);

#else

wchar_t        szout[128];

wsprintfw(szout, l"%s", sztstr);    //%s修飾符將sztstr視為pstr

messageboxa(      &sztstr[0],  "messageboxa", mb_ok);

messageboxw(null, &szout[0],  l"messageboxw", mb_ok);   

#endif

上面的演示**中,無論你是否使用unicode編碼,都將得到乙份unicode字串和乙份mbcs字串(其中之一需要用wsprintf轉換得到,另乙份不需要轉換),並顯示輸出。

如果你擔心szout的空間太小,完全可以仿照atl轉換巨集,使用堆疊上動態記憶體申請函式

calloc實現。

在debug模式下除錯unicode編碼的程式時(以前是mbcs編碼,沒有出現過此問題),提示"please enter the path for mfcs42ud.pdb",雖然取消後可能繼續執行,但是無法在監視視窗檢視變數內容。

方法:從vs6的安裝盤上vc98/mfc/lib下的mfcs42ud.lib、mfcs42ud.pdb、mfcs42u.lib及mfcs42u.pdb複製到vs安裝目錄下的vc98/mfc/lib目錄中。然後

全部重編譯。

其他:下面是網上蒐集的資料,主要是針對mfc的眾多版本的命名說明:

mfc42d.dll (core), mfco42d.dll (ole), mfcd42d.dll (database), mfcn42d.dll (network), mfcs42d.lib (static)

mfc42.dll (combined), mfcs42.lib (static)

mfc42ud.dll (core), mfco42ud.dll (ole), mfcd42ud.dll (database), mfcn42ud.dll (network), mfcs42ud.lib (static)

mfc42u.dll (combined), mfcs42u.lib (static)   

vim程式設計設定

在終端下使用vim進行編輯時,預設情況下,編輯的介面上是沒有顯示行號 語法高亮度顯示 智慧型縮排 等功能的。為了更好的在vim下進行工作,需要手動設定乙個配置檔案 vimrc。在啟動vim時,當前使用者根目錄下的.vimrc檔案會被自動讀取,該檔案可以包含一些設定甚至指令碼,所以,一般情況下把.vi...

Vim IDE程式設計環境設定

先看看 設定如下 步驟 1.vi vimrc 2.將下面內容拷貝到.vimrc並儲存退出 syntax on set linebreak set textwidth 80 set nocompatible set history 400 set ruler set number set autoch...

網路程式設計設定TTL

最近遇到乙個問題,領導讓我查一下關於多播的ttl配置的問題,我也是看了diam之後才知道的原來ttl可以通過程式設計來實現,說起來網路程式設計能力欠佳啊 ttl是 time to live的縮寫,該欄位指定ip包被路由器丟棄之前允許通過的最大網段數量。ttl是ipv4包頭的乙個8 bit欄位.在ip...