• <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>

            一路走來(lái),只有C++和香煙最實(shí)在!

            Just Dive Into!

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              11 Posts :: 0 Stories :: 29 Comments :: 0 Trackbacks
                 不知道現(xiàn)在還有沒(méi)有人在開(kāi)發(fā)DLL,其實(shí)VS下面開(kāi)發(fā)C++的DLL還是很方便的,而且Release的時(shí)候也很方便,只要把模塊的只能劃分清楚,封裝好不同的DLL工程,在一個(gè)主工程里面引用這些不同的DLL工程還是很不錯(cuò)的,這樣發(fā)布的時(shí)候有一個(gè)主工程的EXE 和不同的DLL就可以了,不論是調(diào)試還是Release都比較簡(jiǎn)單,下面就簡(jiǎn)單說(shuō)說(shuō)開(kāi)發(fā)的過(guò)程。
                   首先要有一個(gè)解決方案,我想這個(gè)怎么搞就不用我在這里廢話(huà)了哦,生成一個(gè)項(xiàng)目作為界面,同時(shí)這個(gè)項(xiàng)目也是主項(xiàng)目。在該解決方案下面添加實(shí)現(xiàn)不同功能的各種項(xiàng)目,這些項(xiàng)目在向?qū)е羞x擇的時(shí)候選擇為win32 項(xiàng)目,在為win32項(xiàng)目的應(yīng)用程序設(shè)置中選擇DLL就可以建立一個(gè)DLL工程了,在DLL工程中添加自己寫(xiě)的頭文件和CPP文件,這樣就建立了一個(gè)DLL不過(guò)現(xiàn)在還沒(méi)有導(dǎo)出DLL。
                 要生成一個(gè)DLL還必須添加導(dǎo)出函數(shù)的宏, __declspec(dllexport)和__declspec(dllimport) 這里有一個(gè)小的技巧,就是利用工程的預(yù)編譯宏來(lái)設(shè)置如果有一個(gè)工程名為T(mén)est,在要導(dǎo)出的類(lèi)前面加上如下的代碼
            1#ifdef TEST_EXPORTS
            2#define TEST_API  __declspec(dllexport)
            3#else
            4#define TEST_API __declspec(dllimport)
            5#endif
            如果要導(dǎo)出的類(lèi)名為class exportA;則可以在頭文件中類(lèi)的聲明可以這樣寫(xiě)class TEST_API exportA結(jié)可以把整個(gè)類(lèi)導(dǎo)出了,在主工程中引用導(dǎo)出類(lèi)exportA 只要包含該頭文件就可以了,為什么會(huì)這樣這是因?yàn)槭褂昧松厦娴念A(yù)編譯頭的緣故哦,在DLL工程中存在TEST_EXPORTS宏,所以在DLL工程中是類(lèi)導(dǎo)出,在其他引用該工程的工程中包含搞頭文件因?yàn)椴淮嬖赥EST_EXPORTS宏,所以是類(lèi)導(dǎo)入,呵呵 比較巧妙吧,其實(shí)看看網(wǎng)上的很多開(kāi)源的庫(kù)生成DLL的好像很多也使用了該方法,不過(guò)可能可能開(kāi)源庫(kù)很少是用VS開(kāi)發(fā)的,所以不知道他們具體是怎么搞的。但是確實(shí)看到很多的開(kāi)源庫(kù)的配置文件性質(zhì)的投文件中使用了這個(gè)技巧的。
                 上面說(shuō)的還有一個(gè)問(wèn)題就是在其他工程中包含DLL工程還存在問(wèn)題,無(wú)法引用導(dǎo)出的類(lèi),應(yīng)該還有一個(gè)工作要做那就是應(yīng)該包含DLL工程生成的lib 和dll文件加上導(dǎo)出類(lèi)的頭文件就可以直接使用DLL工程中的類(lèi)了哦,不過(guò)如果是自己開(kāi)發(fā)還是最好把DLL工程和要引用DLL的工程作為一個(gè)解決方案的啦,這樣方便調(diào)試的,這里有幾個(gè)問(wèn)題要注意:
                  1 項(xiàng)目依賴(lài)一定要設(shè)置好,至于怎么設(shè)置 那我就不說(shuō)了哦,呵呵 在項(xiàng)目右鍵總是會(huì)的哦
                  2 項(xiàng)目引用要設(shè)置哦,比如說(shuō)工程A使用了exportA類(lèi),那就一定要設(shè)置引用,引用工程Test,怎么設(shè)置,在A的通用屬性中的引用中設(shè)置啦。
                ok這樣就可以開(kāi)發(fā)出使用DLL的工程了哦,Release的時(shí)候含有一大堆的DLL給用戶(hù)搞得很專(zhuān)業(yè)的樣子哦,呵呵!PS:可能有人說(shuō)導(dǎo)出類(lèi)會(huì)暴露很多細(xì)節(jié)給用戶(hù)啦,呵呵這個(gè)其實(shí)也好解決的哦,看看OCI的封裝就會(huì)知道哦,使用私有類(lèi)就可以隱藏所有的私有方法和屬性的哦,具體怎么搞?呵呵去看看exception C++上關(guān)于IMPL的啦 上面有很好的說(shuō)明撒。
            posted on 2008-12-21 00:40 Richard Liu 閱讀(7172) 評(píng)論(3)  編輯 收藏 引用

            Feedback

            # re: VS2005開(kāi)發(fā)DLL工程 2010-03-04 20:56 wendy wang
            您有什么VS2005編庫(kù)的一些資料嗎?介紹一下,謝謝.如果有麻煩您發(fā)給我一下
            wgytsh@gmail.com  回復(fù)  更多評(píng)論
              

            # re: VS2005開(kāi)發(fā)DLL工程 2010-05-31 14:31 zofi
            我操你媽?zhuān)粫?huì)說(shuō)中國(guó)話(huà)是不是,標(biāo)點(diǎn)不會(huì)用啊,一句話(huà)說(shuō)得跟屎一樣,垃圾  回復(fù)  更多評(píng)論
              

            # re: VS2005開(kāi)發(fā)DLL工程 2011-07-24 12:54 ccd
            @zofi
            樓上的,不要傷害樓主  回復(fù)  更多評(píng)論
              


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


            久久国产精品成人影院| 麻豆av久久av盛宴av| 94久久国产乱子伦精品免费| 久久国产精品久久精品国产| 国内精品欧美久久精品| 国产精品亚洲综合专区片高清久久久| 91久久九九无码成人网站| 日日狠狠久久偷偷色综合0| 亚洲精品乱码久久久久久久久久久久 | 国产精品久久久久久影院 | 久久久久久精品免费免费自慰| 久久无码高潮喷水| 精品久久国产一区二区三区香蕉| 久久只有这精品99| 亚洲国产精品一区二区久久| 久久久久亚洲精品日久生情 | 久久久久久久综合狠狠综合| 国产91色综合久久免费| 久久久亚洲AV波多野结衣| 久久国产免费直播| 久久精品这里热有精品| 亚洲色婷婷综合久久| 精品久久久久久久国产潘金莲 | 精品久久久无码人妻中文字幕| 91久久精品无码一区二区毛片| 久久天天躁狠狠躁夜夜avapp| 久久国产三级无码一区二区| 国产午夜精品理论片久久影视 | 久久精品国产亚洲av日韩| 中文字幕热久久久久久久| 欧美激情一区二区久久久| 久久se精品一区二区影院| 99热热久久这里只有精品68| 国产一区二区三区久久| 91精品国产9l久久久久| 精品国产VA久久久久久久冰 | 免费观看久久精彩视频| 国产成人精品免费久久久久| 狠狠88综合久久久久综合网| 色欲久久久天天天综合网精品 | 久久婷婷人人澡人人|