青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0
/********************************************\
|????歡迎轉載, 但請保留作者姓名和原文鏈接, 祝您進步并共勉!???? |
\********************************************/

作者: Jerry Cat
時間: 2006/05/25
鏈接:http://m.shnenglu.com/jerysun0818/archive/2006/05/25/7618.html


resource dll
許多細心的人也許已經注意到,在VC的集成編譯環境 (IDE)中有一個功能,你可以選中一個資源,在上面點擊鼠標右鍵,選
擇Insert Copy,選擇一個不同的Condition。然而我用VC十多年,一直沒有用過這個特性,也從來不知道他是干嗎的。前兩天有
個網友問我這個東西是干嗎的,才下決心去研究一下。仔細研究之后,才發現他是用于資源DLL的。
?
對于提供國際化解決方案的程序設計者而言,根據用戶地區設置來顯示對應的語言界面,將是非常有意義的。本文的目的是提
供一個step by step的建議,讓沒有做過資源dll的人可以從中受益。由于我也沒做過資源dll,研究這個也就半天時間,因此如果
有什么錯誤,也很正常。請發現錯誤的朋友直接發郵件給我。對于你的幫助,我將非常感謝。

主工程的要求

對于一個需要使用資源dll實現國際化的工程,我們必須保證每個展現給用戶的界面元素都必須從資源里獲得。這主要指得是名
目繁多的字符串。程序設計者喜歡用AfxMessageBox顯示信息。在單語言情況下,這當然沒有問題。但是如果是多語言環境,
這樣做就很難控制這個顯示信息和當前的區域設置匹配。

另外,主工程的設計應該在創建資源dll之前完成。這樣做的原因是,資源dll設計很簡單,花不了多少時間。而如果資源的修
改,如果沒有正確反映到代碼上,有時候程序會莫名其妙的崩潰了,而你需要花很長的時間來找到原因。我自己的一個例子
是:我在icon中插入了一個65535色的圖片,程序一直起不來,后來找了很久才找到原因。如果我們按照普通方式設計主工程,
并經過測試證明他工作正常,此時再做資源dll,就會避免在兩個工程之間調試并找原因。

實際上對于增量開發情況,這種資源dll和主工程并存的情況可能難以避免,這時就需要增刪資源特別小心,避免導致錯誤。

為了簡化起見,我創建一個缺省的對話框工程來做測試,步驟如下:

  1. 啟動Microsoft Visual Studio 6.0
  2. 點擊File, New
  3. 選擇Microsoft AppWizard(exe)工程,輸入工程名test,點擊OK
  4. 選擇Dialog Based,并在What language would you like your resources in?下選擇中文(此時選擇自己最喜歡的語言即可,
    我不熟悉英文,就選擇中文了)
  5. 點擊Finish創建工程
創建資源dll工程

我們可以按照下述步驟創建一個資源DLL:
?
  1. 創建一個普通的WIN32 Dynamic-Link Library(這里取名testdll)
  2. 把主工程中的所有資源相關的文件(rc,rc2,ico等)加入這個dll工程
  3. 點擊菜單Build, Configurations,此時,我們應該有Release和Debug兩個配置
  4. 點擊Add按鈕,以Debug為模板創建DebugEN和DebugCN
  5. 重復上述步驟,以Release為模板,創建ReleaseEN和ReleaseCN
  6. 刪除原來的Debug和Release配置,然后點擊Close退出配置對話框
  7. 按組合鍵ALT+F7彈出Project Settings對話框
  8. 選擇Resources頁
  9. 左側選擇All Configurations
  10. 在Preprocessor Definitions中添加如下宏AFX_RESOURCE_DLL
  11. 左側選擇Multiple Configurations,選中DebugEN和ReleaseEN
  12. 重復第10步,輸入AFX_TARG_ENU宏(這是為美國英語而定義的宏English U.S)
  13. 重復11,12步,為DebugCN和ReleaseCN添加AFX_TARG_CHS宏(這是為簡體中文的宏Chinese Simplified)
  14. 選擇Link頁,為每個配置指定輸出文件名(我這里分別為testdll_end.dll, testdll_enr.dll, testdll_cnd.dll,testdll_cnr.dll,
    分別表示英文debug,英文release和中文相關文件)
  15. 關閉Project Settings對話框
  16. 選中Resource View
  17. 在每個資源ID上右擊,選擇Insert Copy,改變Language為English(U.S)
  18. 如果為同一種語言你還希望提供根據某個自定義的宏而選擇不同的界面(如UI模式和Service模式),在Condition
    中輸入你用以區分的宏名,如SERVICE_DLL。
  19. 打開每個新創建的資源,根據自己的需要修改資源(注意:這里只建議修改文字、字體,必須嚴格保證不刪除任何資源)
  20. 保存修改
  21. 編譯資源DLL
修改主工程

由于我們打算用資源dll來提供資源信息,我們必須對主工程做如下修改:
  1. 打開工程
  2. 選擇File View,刪除rc,rc2,ico等和資源密切相關的文件。resource.h請不要刪除
  3. 在CWinApp中添加一個私有的HMODULE類型的變量m_hResource
  4. 在InitInstance函數開頭添加如下代碼:
    LANGID id = ::GetUserDefaultLangID();
    ?switch(id)
    ?{
    ?case 0x804://中文
    #ifdef _DEBUG
    ????? m_hResource = LoadLibrary(_T("D:\\projects\\testdll\\DebugCN\\testdllcnd.dll"));
    #else
    ????? m_hResource = LoadLibrary(_T("D:\\projects\\testdll\\ReleaseCN\\testdllcnr.dll"));
    #endif
    ????? break;
    default:
    #ifdef _DEBUG
    ????? m_hResource = LoadLibrary(_T("D:\\projects\\testdll\\DebugEN\\testdllend.dll"));
    #else
    ??? ??m_hResource = LoadLibrary(_T("D:\\projects\\testdll\\ReleaseCN\\testdllenr.dll"));
    #endif
    ?}
    ?if(m_hResource == NULL)
    ?{
    ????? return FALSE;
    ?}else{
    ????? AfxSetResourceHandle((HINSTANCE)m_hResource);
    ?}

?此后再做一點簡單的調試,應該就可以了。具體調試,就已經超出我這篇文章所能討論的范圍了。
posted on 2006-05-25 10:17 Jerry Cat 閱讀(1197) 評論(2)  編輯 收藏 引用

FeedBack:
# re: resource dll
2006-05-25 13:42 | 沐楓
這個模板把內容都遮住了。  回復  更多評論
  
# re: resource dll
2006-05-25 20:13 | Jerry Cat
已調整.

這就是開源產品不如正常的商業軟件的最大原因, 既然免費就不象人家商業軟件公司那樣把用戶當成上帝, 一切要盡善盡美. "這樣的產品, 用戶怎么會喜歡呢?", 這是商業化軟件公司的每個人時時刻刻都在自問的一句話. 所以, 很多人寧愿花錢買也不要開源的白送, 就是這道理, 得民心者得天下, 微軟深知此道, 所以不成功也不行! 我們這些小公司, 也是每天兢兢業業地把軟件做好, 讓用戶在任何方面都感到舒服, 感到能極大地提高他們的生產力.

BTW, 要是飛機也開源, 但是不保證安全, 反正免費送給你, 從天上掉下來我也可免責. 人家航空公司肯定愿花幾千萬, 買個商業化的飛機也不要你白送的飛機. 旅客也不敢乘開源的飛機, 不要錢, 白乘也不干, 我靠, 為了省錢, 命都不要了. 所以, 正規的場合還是商業化軟件的天下!

不怪cppblog, 人家畢竟免費提供一個blog.  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2006年5月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿(7)

隨筆檔案

最新隨筆

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品一区二区三区99| 亚洲激情六月丁香| 久久久久国产一区二区| 欧美一级久久久| 欧美国产日本韩| 日韩午夜激情av| 亚洲巨乳在线| 亚洲视频欧美在线| 午夜精品久久久久久久白皮肤 | 久久久久久久波多野高潮日日| 亚洲欧美资源在线| 久久综合给合久久狠狠狠97色69| 欧美激情第一页xxx| 国产精品卡一卡二卡三| 国内精品写真在线观看| 99re成人精品视频| 久久精品在线| 99精品福利视频| 久久婷婷久久| 国产精品va| 亚洲国产精品一区制服丝袜| 亚洲午夜精品视频| 美女主播一区| 亚洲欧美国产日韩中文字幕| 欧美成ee人免费视频| 国产日韩精品入口| 一本综合久久| 亚洲第一搞黄网站| 欧美一级成年大片在线观看| 欧美日韩国产精品专区| 伊人久久综合97精品| 午夜国产一区| 日韩视频免费观看高清完整版| 久久久久久久高潮| 国产视频综合在线| 性亚洲最疯狂xxxx高清| 亚洲精品国久久99热| 久热国产精品视频| 国产一区二区毛片| 午夜精品免费视频| 日韩午夜免费视频| 欧美极品一区| 亚洲激情国产| 欧美国产日韩一区二区| 久久不见久久见免费视频1| 国产精品毛片a∨一区二区三区|国 | 亚洲一区久久久| 欧美激情第10页| 久久久久九九九| 国内精品久久久久久| 久久福利影视| 欧美一区二区三区在线观看视频 | 亚洲欧美一级二级三级| 免费在线国产精品| 亚洲国产高清在线观看视频| 久久婷婷国产综合国色天香| 欧美一区二区三区在| 国产视频一区欧美| 久久久久综合网| 久久久噜噜噜久久中文字免| 18成人免费观看视频| 欧美大胆a视频| 欧美成人亚洲成人| 一二三四社区欧美黄| 亚洲视频一区在线| 国产欧美日韩麻豆91| 久久久久久成人| 久久免费少妇高潮久久精品99| 在线精品高清中文字幕| 欧美激情亚洲自拍| 欧美日韩dvd在线观看| 亚洲夜间福利| 欧美一区二区视频在线观看2020 | 亚洲美女黄色片| 欧美视频福利| 性亚洲最疯狂xxxx高清| 欧美自拍偷拍午夜视频| 亚洲国产日日夜夜| 日韩天堂在线视频| 国产日韩亚洲欧美| 欧美韩国日本综合| 欧美午夜视频网站| 久久色在线观看| 欧美精品久久天天躁| 亚洲欧美日本日韩| 久久五月激情| 亚洲午夜视频| 久久久久久一区二区| 9人人澡人人爽人人精品| 午夜在线精品| 亚洲美女在线国产| 欧美一区二区三区久久精品| 亚洲美女在线视频| 亚洲欧美国产毛片在线| 亚洲人人精品| 欧美尤物一区| 亚洲自拍啪啪| 男人的天堂成人在线| 欧美一区二区高清| 欧美黑人多人双交| 久热这里只精品99re8久| 国产精品v一区二区三区| 欧美成人精品高清在线播放| 国产精品久久久久久五月尺| 欧美激情一区二区三级高清视频 | 亚洲一二三区精品| 久久中文字幕导航| 久久精品夜色噜噜亚洲a∨| 欧美日本久久| 亚洲大片在线观看| 韩国福利一区| 亚洲午夜免费视频| 免费久久99精品国产自在现线| 欧美日本一区| 欧美凹凸一区二区三区视频| 国产精品欧美精品| 亚洲精品视频啊美女在线直播| 好看不卡的中文字幕| 亚洲欧美国产高清| 亚洲免费视频观看| 欧美日韩美女一区二区| 亚洲黄一区二区| 尤物精品在线| 久久国产福利国产秒拍| 亚洲欧美日韩一区二区三区在线| 欧美黄色成人网| 亚洲国产二区| 最新日韩在线| 欧美激情久久久久久| 亚洲第一在线综合网站| 亚洲国产精品专区久久| 狼狼综合久久久久综合网 | 亚洲视频免费| 欧美理论在线播放| 亚洲精品在线一区二区| 夜夜嗨av色一区二区不卡| 欧美岛国激情| 亚洲精品国精品久久99热一| 亚洲老司机av| 欧美精品123区| 日韩视频在线一区| 亚洲欧美怡红院| 国产深夜精品| 老妇喷水一区二区三区| 欧美激情综合| 一区二区免费在线视频| 国产精品电影观看| 亚洲欧美日本国产有色| 久久精品30| 亚洲电影在线观看| 欧美大片一区二区三区| 99re国产精品| 欧美在线一二三区| 一区三区视频| 欧美美女日韩| 亚洲欧美另类综合偷拍| 免费在线成人| 一区二区三区精品国产| 国产精品中文在线| 麻豆成人在线| 亚洲天堂第二页| 美腿丝袜亚洲色图| 国产精品99久久久久久久久久久久 | 欧美精品日韩精品| 亚洲欧美日本另类| 亚洲国产成人av| 欧美一二三视频| 亚洲第一视频网站| 国产精品99免费看 | 在线中文字幕不卡| 久久久久久久网站| 一区二区欧美日韩| 国产一区二区中文字幕免费看| 一二美女精品欧洲| 国产亚洲欧洲997久久综合| 久久频这里精品99香蕉| 亚洲乱码国产乱码精品精98午夜| 午夜一级在线看亚洲| 亚洲激情图片小说视频| 国产精品日日摸夜夜添夜夜av| 久久资源av| 亚洲摸下面视频| 亚洲精品一区二区三| 美女视频黄免费的久久| 午夜精品久久久久久久男人的天堂| 亚洲第一综合天堂另类专| 国产精品在线看| 欧美日韩一区三区| 麻豆精品国产91久久久久久| 亚洲在线网站| 亚洲美女福利视频网站| 欧美成人情趣视频| 久久久夜夜夜| 欧美一区二区免费| 亚洲一区综合| 亚洲色图制服丝袜| 日韩视频―中文字幕| 亚洲成色www8888| 极品中文字幕一区| 国产在线拍偷自揄拍精品|