• <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
            /********************************************\
            |????歡迎轉(zhuǎn)載, 但請(qǐng)保留作者姓名和原文鏈接, 祝您進(jìn)步并共勉!???? |
            \********************************************/

            作者: Jerry Cat
            時(shí)間: 2006/05/25
            鏈接:http://www.shnenglu.com/jerysun0818/archive/2006/05/25/7618.html


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

            主工程的要求

            對(duì)于一個(gè)需要使用資源dll實(shí)現(xiàn)國(guó)際化的工程,我們必須保證每個(gè)展現(xiàn)給用戶的界面元素都必須從資源里獲得。這主要指得是名
            目繁多的字符串。程序設(shè)計(jì)者喜歡用AfxMessageBox顯示信息。在單語(yǔ)言情況下,這當(dāng)然沒有問(wèn)題。但是如果是多語(yǔ)言環(huán)境,
            這樣做就很難控制這個(gè)顯示信息和當(dāng)前的區(qū)域設(shè)置匹配。

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

            實(shí)際上對(duì)于增量開發(fā)情況,這種資源dll和主工程并存的情況可能難以避免,這時(shí)就需要增刪資源特別小心,避免導(dǎo)致錯(cuò)誤。

            為了簡(jiǎn)化起見,我創(chuàng)建一個(gè)缺省的對(duì)話框工程來(lái)做測(cè)試,步驟如下:

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

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

            由于我們打算用資源dll來(lái)提供資源信息,我們必須對(duì)主工程做如下修改:
            1. 打開工程
            2. 選擇File View,刪除rc,rc2,ico等和資源密切相關(guān)的文件。resource.h請(qǐng)不要?jiǎng)h除
            3. 在CWinApp中添加一個(gè)私有的HMODULE類型的變量m_hResource
            4. 在InitInstance函數(shù)開頭添加如下代碼:
              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);
              ?}

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

            FeedBack:
            # re: resource dll
            2006-05-25 13:42 | 沐楓
            這個(gè)模板把內(nèi)容都遮住了。  回復(fù)  更多評(píng)論
              
            # re: resource dll
            2006-05-25 20:13 | Jerry Cat
            已調(diào)整.

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

            BTW, 要是飛機(jī)也開源, 但是不保證安全, 反正免費(fèi)送給你, 從天上掉下來(lái)我也可免責(zé). 人家航空公司肯定愿花幾千萬(wàn), 買個(gè)商業(yè)化的飛機(jī)也不要你白送的飛機(jī). 旅客也不敢乘開源的飛機(jī), 不要錢, 白乘也不干, 我靠, 為了省錢, 命都不要了. 所以, 正規(guī)的場(chǎng)合還是商業(yè)化軟件的天下!

            不怪cppblog, 人家畢竟免費(fèi)提供一個(gè)blog.  回復(fù)  更多評(píng)論
              

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理



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

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久乐国产综合亚洲精品| 波多野结衣久久精品| 欧美日韩久久中文字幕| 久久综合九色综合精品| 久久99国产精品久久久| 国产午夜精品理论片久久 | 狠狠综合久久综合中文88| 一本久久a久久精品综合香蕉| 国产精品久久久久a影院| 亚洲中文久久精品无码| 伊人久久亚洲综合影院| 7777精品久久久大香线蕉| 久久99国产亚洲高清观看首页| 人妻无码精品久久亚瑟影视| 久久这里只有精品视频99| 精品综合久久久久久97超人 | 香蕉久久夜色精品国产小说| 超级碰碰碰碰97久久久久| 91久久精品国产免费直播| 亚洲欧美伊人久久综合一区二区| 99久久精品免费看国产| 亚洲国产成人久久精品99| 久久99精品国产99久久| 久久综合精品国产二区无码| 伊人色综合久久天天人守人婷| 99久久99久久精品国产片果冻| 久久热这里只有精品在线观看| 精品国产91久久久久久久a| AV无码久久久久不卡网站下载| 久久午夜夜伦鲁鲁片免费无码影视 | 日韩精品久久无码人妻中文字幕| 久久久久久亚洲精品不卡| 伊人色综合久久| 一级做a爱片久久毛片| 久久99国产综合精品女同| 日韩久久久久久中文人妻| 久久综合亚洲欧美成人| 国产亚洲欧美精品久久久| 国产精品一久久香蕉国产线看观看| 亚洲精品乱码久久久久久| 亚洲欧洲日产国码无码久久99|