• <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 調(diào)用方式

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

            DLL(動(dòng)態(tài)連接庫),然而可以分為動(dòng)態(tài)調(diào)用于靜態(tài)調(diào)用。下面我分別舉一個(gè)例子說說。

            1)動(dòng)態(tài)調(diào)用:
            首先:在VC++6.0中創(chuàng)建 Win32 Dynamic-link library工程創(chuàng)建一個(gè)動(dòng)態(tài)連接庫工程:
                        在頭文件TestDll.h中寫下代碼
                        extern "C" int __declspec(dllexport) add(int numa, int numb);
                        在源文件TestDll.cpp中實(shí)現(xiàn)改函數(shù):
                        int __declspec(dllexport) add(int numa, int numb)
                        {
                                  return numa + numb;
                        }
            其次,創(chuàng)建一個(gè)測試程序,TestDemo,創(chuàng)建一個(gè).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;
            }
            而應(yīng)用程序?qū)Ρ綝LL的調(diào)用和對第2節(jié)靜態(tài)鏈接庫的調(diào)用卻有較大差異,下面我們來逐一分析。

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

                其次,在函數(shù)main中定義了一個(gè)DLL HINSTANCE句柄實(shí)例hDll,通過Win32 Api函數(shù)LoadLibrary動(dòng)態(tài)加載了DLL模塊并將DLL模塊句柄賦給了hDll;

               再次,在函數(shù)main中通過Win32 Api函數(shù)GetProcAddress得到了所加載DLL模塊中函數(shù)add的地址并賦給了addFun。經(jīng)由函數(shù)指針addFun進(jìn)行了對DLL中add函數(shù)的調(diào)用;

                 最后,應(yīng)用工程使用完DLL后,在函數(shù)main中通過Win32 Api函數(shù)FreeLibrary釋放了已經(jīng)加載的DLL模塊。

                通過這個(gè)簡單的例子,我們獲知DLL定義和調(diào)用的一般概念:

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

                 (2)應(yīng)用工程需以某種特定的方式調(diào)用DLL的導(dǎo)出函數(shù)(或變量、類)。


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

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

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

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

                     

            久久99精品国产麻豆宅宅| 97久久婷婷五月综合色d啪蜜芽 | 久久夜色精品国产噜噜亚洲AV| 少妇被又大又粗又爽毛片久久黑人| 亚洲日韩欧美一区久久久久我 | 欧美黑人激情性久久| 国产精品久久久久9999高清| 久久免费高清视频| 亚洲精品第一综合99久久| 久久婷婷五月综合97色| 国产91久久综合| 久久久久亚洲av无码专区导航| 亚洲国产精品久久久久久| 久久久久波多野结衣高潮| 久久精品国产只有精品66| 国产高潮国产高潮久久久| 偷偷做久久久久网站| 91久久精品国产成人久久| 久久久久久久久久久久中文字幕 | 国产精品久久久久久久久软件| 久久久久久久亚洲Av无码| 久久久久亚洲av综合波多野结衣| 国产精品99久久久久久董美香| 精品乱码久久久久久久| 中文字幕久久久久人妻| 久久久久久免费视频| 亚洲精品国产自在久久| 手机看片久久高清国产日韩| 国产精品一区二区久久精品无码| 9久久9久久精品| 国产一级做a爰片久久毛片| 久久精品国产乱子伦| 久久热这里只有精品在线观看| 日韩精品无码久久一区二区三| 久久精品无码一区二区三区日韩| 欧美激情精品久久久久| 国产高清美女一级a毛片久久w| 日韩精品国产自在久久现线拍| 丰满少妇高潮惨叫久久久| 久久精品国产半推半就| 亚洲国产精品热久久|