• <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>
            動(dòng)態(tài)調(diào)用
            typedef int(*lpAddFun)(int, int); //宏定義函數(shù)指針類型

            int main(int argc, char *argv[])

            {

            HINSTANCE hDll; //DLL句柄

            lpAddFun addFun; //函數(shù)指針

            hDll = LoadLibrary("..\\Debug\\dllTest.dll");

            if (hDll != NULL)

            {

            addFun = (lpAddFun)GetProcAddress(hDll, "add");

            if (addFun != NULL)

            {

            int result = addFun(2, 3);

            printf("%d", result);

            }

            FreeLibrary(hDll);

            }

            return 0;

            }
              在上邊的例子中我們看到了由“LoadLibrary-GetProcAddress-FreeLibrary”系統(tǒng)Api提供的三位一體“DLL加載-DLL函數(shù)地址獲取-DLL釋放”方式,這種調(diào)用方式稱為DLL的動(dòng)態(tài)調(diào)用。

              動(dòng)態(tài)調(diào)用方式的特點(diǎn)是完全由編程者用 API 函數(shù)加載和卸載 DLL,程序員可以決定 DLL 文件何時(shí)加載或不加載,顯式鏈接在運(yùn)行時(shí)決定加載哪個(gè) DLL 文件。

              與動(dòng)態(tài)調(diào)用方式相對(duì)應(yīng)的就是靜態(tài)調(diào)用方式,“有動(dòng)必有靜”,這來(lái)源于物質(zhì)世界的對(duì)立統(tǒng)一。“動(dòng)與靜”,其對(duì)立與統(tǒng)一竟無(wú)數(shù)次在技術(shù)領(lǐng)域里得到驗(yàn)證,譬如靜態(tài)IP與DHCP、靜態(tài)路由與動(dòng)態(tài)路由等。從前文我們已經(jīng)知道,庫(kù)也分為靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)DLL,而想不到,深入到DLL內(nèi)部,其調(diào)用方式也分為靜態(tài)與動(dòng)態(tài)。“動(dòng)與靜”,無(wú)處不在。《周易》已認(rèn)識(shí)到有動(dòng)必有靜的動(dòng)靜平衡觀,《易.系辭》曰:“動(dòng)靜有常,剛?cè)釘嘁印薄U軐W(xué)意味著一種普遍的真理,因此,我們經(jīng)常可以在枯燥的技術(shù)領(lǐng)域看到哲學(xué)的影子。

              靜態(tài)調(diào)用方式的特點(diǎn)是由編譯系統(tǒng)完成對(duì)DLL的加載和應(yīng)用程序結(jié)束時(shí) DLL 的卸載。當(dāng)調(diào)用某DLL的應(yīng)用程序結(jié)束時(shí),若系統(tǒng)中還有其它程序使用該 DLL,則Windows對(duì)DLL的應(yīng)用記錄減1,直到所有使用該DLL的程序都結(jié)束時(shí)才釋放它。靜態(tài)調(diào)用方式簡(jiǎn)單實(shí)用,但不如動(dòng)態(tài)調(diào)用方式靈活。

              下面我們來(lái)看看靜態(tài)調(diào)用的例子,將編譯dllTest工程所生成的.lib和.dll文件拷入dllCall工程所在的路徑,dllCall執(zhí)行下列代碼:

            #pragma comment(lib,"dllTest.lib")

            //.lib文件中僅僅是關(guān)于其對(duì)應(yīng)DLL文件中函數(shù)的重定位信息

            extern "C" __declspec(dllimport) add(int x,int y);

            int main(int argc, char* argv[])

            {

            int result = add(2,3);

            printf("%d",result);

            return 0;

            }


              由上述代碼可以看出,靜態(tài)調(diào)用方式的順利進(jìn)行需要完成兩個(gè)動(dòng)作

              (1)告訴編譯器與DLL相對(duì)應(yīng)的.lib文件所在的路徑及文件名,#pragma comment(lib,"dllTest.lib")就是起這個(gè)作用。

              程序員在建立一個(gè)DLL文件時(shí),連接器會(huì)自動(dòng)為其生成一個(gè)對(duì)應(yīng)的.lib文件,該文件包含了DLL 導(dǎo)出函數(shù)的符號(hào)名及序號(hào)(并不含有實(shí)際的代碼)。在應(yīng)用程序里,.lib文件將作為DLL的替代文件參與編譯。

              (2)聲明導(dǎo)入函數(shù),extern "C" __declspec(dllimport) add(int x,int y)語(yǔ)句中的__declspec(dllimport)發(fā)揮這個(gè)作用。

              靜態(tài)調(diào)用方式不再需要使用系統(tǒng)API來(lái)加載、卸載DLL以及獲取DLL中導(dǎo)出函數(shù)的地址。這是因?yàn)椋?dāng)程序員通過(guò)靜態(tài)鏈接方式編譯生成應(yīng)用程序時(shí),應(yīng)用程序中調(diào)用的與.lib文件中導(dǎo)出符號(hào)相匹配的函數(shù)符號(hào)將進(jìn)入到生成的EXE 文件中,.lib文件中所包含的與之對(duì)應(yīng)的DLL文件的文件名也被編譯器存儲(chǔ)在 EXE文件內(nèi)部。當(dāng)應(yīng)用程序運(yùn)行過(guò)程中需要加載DLL文件時(shí),Windows將根據(jù)這些信息發(fā)現(xiàn)并加載DLL,然后通過(guò)符號(hào)名實(shí)現(xiàn)對(duì)DLL 函數(shù)的動(dòng)態(tài)鏈接。這樣,EXE將能直接通過(guò)函數(shù)名調(diào)用DLL的輸出函數(shù),就象調(diào)用程序內(nèi)部的其他函數(shù)一樣。
            Posted on 2005-11-25 18:10 艾凡赫 閱讀(1121) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DLL 技術(shù)
            99国产精品久久久久久久成人热| 亚洲精品国产美女久久久| 91精品国产高清久久久久久91| 久久婷婷五月综合色奶水99啪 | 97久久天天综合色天天综合色hd| 性欧美丰满熟妇XXXX性久久久| 国产精品久久久久久久| 久久久久久久国产免费看| 亚洲色欲久久久久综合网 | 人妻少妇久久中文字幕一区二区 | 久久婷婷成人综合色综合| 99久久国产宗和精品1上映| 久久久噜噜噜久久| 久久综合久久综合九色| 国产日韩欧美久久| 日韩亚洲国产综合久久久| 久久久久一本毛久久久| 久久有码中文字幕| 青青草原1769久久免费播放| 久久久久女教师免费一区| 合区精品久久久中文字幕一区| 无码超乳爆乳中文字幕久久| 久久亚洲欧美日本精品| 亚洲另类欧美综合久久图片区| 久久精品国产清高在天天线| 国产成人久久精品区一区二区| 久久影院久久香蕉国产线看观看| 久久久国产乱子伦精品作者| 久久国产免费直播| av午夜福利一片免费看久久| 久久婷婷五月综合97色直播| 久久w5ww成w人免费| 久久夜色精品国产亚洲av| 国产精品久久99| 伊人久久大香线蕉av一区| 亚洲精品乱码久久久久久蜜桃| 久久久久久国产精品无码超碰| 亚洲午夜福利精品久久| 麻豆久久| 中文字幕无码久久久| 欧美精品丝袜久久久中文字幕|