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

            隨筆 - 25, 文章 - 0, 評論 - 6, 引用 - 0
            數據加載中……

            DLL的創建與調用

            創建動態鏈接庫 (DLL) 項目:

            1、從“文件”菜單中,選擇“新建”,然后選擇“項目…”。

            2、在“項目類型”窗格中,選擇“Visual C++”下的“Win32”。

            3、在“模板”窗格中,選擇“Win32 控制臺應用程序”。

            4、為項目選擇一個名稱,如 MathFuncsDll,并將其鍵入“名稱”字段。 為解決方案選擇一個名稱,如 DynamicLibrary,并將其鍵入“解決方案名稱”字段。

            5、單擊“確定”啟動 Win32 應用程序向導。 在“Win32 應用程序向導”對話框的“概述”頁中,單擊“下一步”。

            6、在“Win32 應用程序向導”中的“應用程序設置”頁中,選擇“應用程序類型”下的“DLL”(如果可用),或者選擇“控制臺應用程序”(如果“DLL”不可用)。 某些版本的 Visual Studio 不支持通過使用向導創建 DLL 項目。 您可以稍后對此進行更改,以將項目編譯為 DLL。

            7、在“Win32 應用程序向導”的“應用程序設置”頁中,選擇“附加選項”下的“空項目”。

            8、單擊“完成”創建項目。

            9、創建導出的類或函數等,必須在類或函數前加上 __declspec(dllexport) 修飾符。 這些修飾符使 DLL 能夠導出該類或函數以供其他應用程序使用。

            調用動態鏈接庫 (DLL)

            1、【C++】->【General】->【additional include directories】       //  添加頭文件目錄
            2、【Linker】->【General】->【additional library directories】    //  添加lib目錄
            3、【linker】->【input】->【additional dependencies】             //  添加lib文件名

            將.dll可以放到工程生成的exe文件夾里面,運行exe就可以直接在當前目錄下找到需要的dll文件。(真正的函數的可執行代碼都在dll中,lib文件僅僅只是一個索引,而.h文件僅僅只是一個對外的接口) 
            動態庫的三個組成部分
            .h文件作用  : 聲明函數接口
            .lib文件作用: 告訴鏈接器調用的函數在哪個DLL中
            .dll文件作用: 函數可執行代碼
            .h頭文件是編譯時必須的,lib是鏈接時需要的,dll是運行時需要的。完成源代碼的編譯和鏈接,有.h和.lib就夠了。要使動態連接的程序運行起來,有.dll就夠了。在開發和調試階段,當然最好都有。
            當我們在自己的程序中引用了一個H文件里的函數,編鏈器怎么知道該調用哪個DLL文件呢?這就是LIB文件的作用: 告訴鏈接器 調用的函數在哪個DLL中,函數執行代碼在DLL中的什么位置,這也就是為什么需要附加依賴項 .LIB文件,它起到橋梁的作用。如果生成靜態庫文件,則沒有DLL ,只有lib,這時函數可執行代碼部分也在lib文件中
            目前以lib后綴的庫有兩種,一種為靜態鏈接庫(Static Libary,以下簡稱“靜態庫”),另一種為動態連接庫(DLL,以下簡稱“動態庫”)的導入庫(Import Libary,以下簡稱“導入庫”)。靜態庫是一個或者多個obj文件的打包,所以有人干脆把從obj文件生成lib的過程稱為Archive,即合并到一起。比如你鏈接一個靜態庫,如果其中有錯,它會準確的找到是哪個obj有錯,即靜態lib只是殼子。動態庫一般會有對應的導入庫,方便程序靜態載入動態鏈接庫,否則你可能就需要自己LoadLibary調入DLL文件,然后再手工GetProcAddress獲得對應函數了。有了導入庫,你只需要鏈接導入庫后按照頭文件函數接口的聲明調用函數就可以了。導入庫和靜態庫的區別很大,他們實質是不一樣的東西。靜態庫本身就包含了實際執行代碼、符號表等等,而對于導入庫而言,其實際的執行代碼位于動態庫中,導入庫只包含了地址符號表等,確保程序找到對應函數的一些基本地址信息。

            posted on 2012-11-14 09:35 chenjt3533 閱讀(285) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            精品久久久久久中文字幕人妻最新 | 国内精品久久久久影院亚洲| 狠狠色伊人久久精品综合网| 精品免费久久久久国产一区 | 欧美久久精品一级c片片| 亚洲国产精品久久| 久久亚洲精品无码播放| 久久精品国产亚洲AV不卡| 久久av无码专区亚洲av桃花岛| 91超碰碰碰碰久久久久久综合| 伊色综合久久之综合久久| 99久久中文字幕| 国内精品伊人久久久久妇| 久久久国产精品福利免费| 久久香综合精品久久伊人| 青草影院天堂男人久久| 综合人妻久久一区二区精品| 精品精品国产自在久久高清| 欧美日韩精品久久久久| 国产高潮久久免费观看| 久久精品黄AA片一区二区三区| 无码8090精品久久一区| 伊人久久免费视频| 久久九九精品99国产精品| 久久狠狠爱亚洲综合影院| 欧美精品丝袜久久久中文字幕 | 狠狠色丁香久久综合五月| 久久天天躁狠狠躁夜夜avapp| 欧美亚洲国产精品久久蜜芽| 无码日韩人妻精品久久蜜桃| 无码八A片人妻少妇久久| 香蕉99久久国产综合精品宅男自| 久久综合狠狠色综合伊人| 久久香综合精品久久伊人| 99久久99久久精品国产片果冻 | 久久久久久久综合日本亚洲| 久久国产色AV免费看| 97精品伊人久久大香线蕉app| 久久精品国产亚洲AV高清热 | 婷婷久久香蕉五月综合加勒比| 老男人久久青草av高清|