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

            DLL 調用方式

            Posted on 2008-01-02 05:24 MiweiDev 閱讀(13632) 評論(0)  編輯 收藏 引用 所屬分類: DLL

            DLL(動態連接庫),然而可以分為動態調用于靜態調用。下面我分別舉一個例子說說。

            1)動態調用:
            首先:在VC++6.0中創建 Win32 Dynamic-link library工程創建一個動態連接庫工程:
                        在頭文件TestDll.h中寫下代碼
                        extern "C" int __declspec(dllexport) add(int numa, int numb);
                        在源文件TestDll.cpp中實現改函數:
                        int __declspec(dllexport) add(int numa, int numb)
                        {
                                  return numa + numb;
                        }
            其次,創建一個測試程序,TestDemo,創建一個.cpp文件,然后放下代碼:
            HINSTANCE hinstance;

            typedef int (*lpAdd)(int a, int b);


            lpAdd lpadd;

            int main()
            {
                      hinstance = LoadLibrary("E:\\vc\\DLL\\TestDll\\Debug\\TestDll.dll");
                      lpadd = (lpAdd)GetProcAddress(hinstance, "add");
                      cout << "2 + 3 = " << lpadd(2, 3) << endl;
                      FreeLibrary(hinstance);
                      return 0;
            }
            而應用程序對本DLL的調用和對第2節靜態鏈接庫的調用卻有較大差異,下面我們來逐一分析。

              首先,語句typedef int ( * lpAddFun)(int,int)定義了一個與add函數接受參數類型和返回值均相同的函數指針類型。隨后,在main函數中定義了lpAddFun的實例addFun;

                其次,在函數main中定義了一個DLL HINSTANCE句柄實例hDll,通過Win32 Api函數LoadLibrary動態加載了DLL模塊并將DLL模塊句柄賦給了hDll;

               再次,在函數main中通過Win32 Api函數GetProcAddress得到了所加載DLL模塊中函數add的地址并賦給了addFun。經由函數指針addFun進行了對DLL中add函數的調用;

                 最后,應用工程使用完DLL后,在函數main中通過Win32 Api函數FreeLibrary釋放了已經加載的DLL模塊。

                通過這個簡單的例子,我們獲知DLL定義和調用的一般概念:

                  (1)DLL中需以某種特定的方式聲明導出函數(或變量、類);

                 (2)應用工程需以某種特定的方式調用DLL的導出函數(或變量、類)。


            2)靜態連接:
            代碼如下:
            #include <iostream>
            using namespace std;

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

            //.lib文件中僅僅是關于其對應DLL文件中函數的重定位信息
            extern "C" __declspec(dllimport) add(int x,int y);

            int main()
            {
                     int result = add(2,3); 
                     cout << result << endl;
                     return 0;
            }

                     

            国产精品久久久久蜜芽| 久久99精品久久久久久久久久| 中文字幕一区二区三区久久网站| 国产午夜久久影院| 色老头网站久久网| 精品久久8x国产免费观看| 国产精品美女久久久免费| 国内精品伊人久久久久妇| 久久精品国产91久久麻豆自制| 九九热久久免费视频| 日本欧美久久久久免费播放网| 亚洲伊人久久大香线蕉苏妲己| 久久久久久久波多野结衣高潮| 久久狠狠高潮亚洲精品| 亚洲精品国产综合久久一线| 久久久久亚洲AV无码网站| 手机看片久久高清国产日韩| 97久久天天综合色天天综合色hd| 久久最新免费视频| 国产高潮国产高潮久久久91| 日日躁夜夜躁狠狠久久AV| 伊人久久大香线蕉综合热线| 久久成人精品视频| 久久精品国产99久久久| 亚洲欧洲精品成人久久奇米网| 久久精品国产半推半就| 久久久亚洲欧洲日产国码二区 | 精品国产乱码久久久久软件| 久久99精品国产麻豆宅宅| 久久久无码人妻精品无码| 漂亮人妻被中出中文字幕久久| 精品久久久无码中文字幕| 久久精品免费观看| 欧美精品一区二区精品久久| 久久婷婷国产综合精品 | 久久九九久精品国产免费直播| 久久天天躁狠狠躁夜夜躁2O2O| 少妇人妻88久久中文字幕| 亚洲狠狠婷婷综合久久蜜芽| 亚洲人成网亚洲欧洲无码久久| 国产精品久久久久久久人人看|