• <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>
            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 閱讀(1186) 評論(2)  編輯 收藏 引用

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

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

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

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

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

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久97精品久久久久久久不卡| 国产精品久久久久久五月尺| 久久亚洲精品国产精品| 亚洲精品美女久久久久99| 91精品国产高清久久久久久io| 精品久久久久中文字幕一区| 久久久久亚洲av成人无码电影 | 久久亚洲日韩精品一区二区三区| 无码AV波多野结衣久久| 久久精品国产91久久综合麻豆自制 | 亚洲欧美成人综合久久久| 日日狠狠久久偷偷色综合0| 久久精品黄AA片一区二区三区| 亚洲一区中文字幕久久| 超级97碰碰碰碰久久久久最新| 久久久青草青青亚洲国产免观| 午夜精品久久影院蜜桃| 国产高清美女一级a毛片久久w| 色88久久久久高潮综合影院 | 精品久久久久久中文字幕大豆网| 久久久久一区二区三区| 久久综合九色综合网站| 久久久久成人精品无码| 国产高潮国产高潮久久久| 中文字幕热久久久久久久| 少妇久久久久久被弄到高潮| 狠狠久久亚洲欧美专区| 久久久无码精品亚洲日韩按摩| 成人综合久久精品色婷婷| 日韩欧美亚洲综合久久影院Ds| 国产免费福利体检区久久| 欧美日韩中文字幕久久伊人| 精品国产VA久久久久久久冰| 久久久久久精品免费看SSS| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久精品午夜一区二区福利| 色综合久久88色综合天天 | 久久久久国产日韩精品网站| 久久夜色精品国产噜噜麻豆| 午夜欧美精品久久久久久久| 欧美喷潮久久久XXXXx|