• <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://www.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)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            日本精品久久久久久久久免费| 国产精品内射久久久久欢欢 | 久久精品国产亚洲沈樵| 无码人妻久久久一区二区三区 | 亚洲乱码日产精品a级毛片久久| 亚洲级αV无码毛片久久精品| 色播久久人人爽人人爽人人片aV| 久久精品亚洲乱码伦伦中文| 久久99精品久久久久婷婷| 久久精品国产亚洲av水果派| 久久久久人妻一区精品| 欧美性大战久久久久久| 无码人妻久久久一区二区三区| 久久99精品国产| 9999国产精品欧美久久久久久| 久久国产影院| 久久精品国产亚洲精品2020| 久久只有这里有精品4| 99久久99久久精品国产片果冻| 日韩欧美亚洲综合久久影院d3| 久久久噜噜噜www成人网| 99久久亚洲综合精品网站| 中文字幕一区二区三区久久网站| 伊色综合久久之综合久久| 国产激情久久久久影院老熟女| 狠狠久久综合| 亚洲国产香蕉人人爽成AV片久久| 国产精品激情综合久久| 久久亚洲日韩看片无码| 久久精品人人做人人爽电影蜜月| 久久精品一区二区三区不卡| 亚洲欧美成人综合久久久| 久久97精品久久久久久久不卡 | 热久久国产欧美一区二区精品| 国产精品成人久久久久三级午夜电影| 色婷婷久久久SWAG精品| 99精品久久精品| 久久久国产精品| 成人精品一区二区久久| 国产精品一久久香蕉产线看| 久久综合给合久久狠狠狠97色|