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

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            轉自: http://blog.163.com/xjchilli/blog/static/45347739200951013454647/
            通常我們在調用DLL時所需的DLL文件必須位于以下三個目錄之一:
              (1)Windows的系統目錄:\windows\system;
              (2)DOS中path所指出的任何目錄;
              (3)程序所在的目錄。
              一、動態鏈接庫的結構

              動態鏈接庫中定義有兩種函數:導出函數(export function)和內部函數(internal function),
            導出函數可以被其它模塊調用,內部函數只能在庫內部使用。我們在用C++定制動態庫文件時,
            需要編寫的就是包含導出函數表的模塊定義文件(.DEF)和實現導出函數功能的C++文件。下面以
            Sample.dll為例介紹DEF文件和實現文件的結構。
              1.模塊定義文件(.DEF)是一個或多個用于描述DLL屬性的模塊語句組成的文本文件,每個DEF文
            件至少必須包含以下模塊定義語句:
               ·第一個語句必須是LIBRARY語句,指出DLL的名字;
               ·EXPORTS語句列出被導出函數的名字;
               ·可以使用DESCRIPTION語句描述DLL的用途(此句可選);
               ·";"對一行進行注釋(可選)。
              2.實現文件
               實現入口表函數的cpp文件中,包含DLL入口點處理的API函數和導出函數的代碼。
              二、創建Sample.dll
               1.首先創建Sample.dll的工程,啟動VC++5.0按以下步驟生成DLL工程:
               ·在選單中選擇File\New\Project;
               ·在工程列表中選擇Win32 Dynamic-Link Library;
               ·在Project Name中輸入工程名:Sample;
               ·單擊Location右邊按鈕,選擇c:\sample目錄;
               ·單擊OK完成,至此已創建了Sample.dll的工程文件。
              2.創建Sample.def文件:
               ·在選單中選擇File\New\Text File;
               ·輸入以下代碼后保存文件名"Sample.def":
               ;Sample.def
               ;指出DLL的名字Sample,鏈接器將這個名字放到DLL導入庫中
               LIBRARY Sample
               ;定義導出函數ShowMe()為例

               EXPORTS
               ShowMe
               ;def文件結束
              3.創建Sample.cpp
               .在選單中選擇File\New\C++ Source File項
               .輸入以下代碼后保存文件名"Sample.cpp"
               //Sample.cpp
               #include 〈windows.h〉
               int ShowMe(void);
               //DllEntryPoint為DLL入口點函數,負責初試化并終止DLL
               BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)
               { switch(dwReason)
               { case DLL-PROCESS-ATTACH:
               { break; }
               case DLL-PROCESS-DETACH:
               { break; } }
               return TRUE; }
               int ShowMe(void)
               { //蜂鳴器響一下
               MessageBeep((WORD)-1);
               MessageBox("你好!");
               return 1; }
              4.編譯DLL文件
              從Build選單中選擇Build Sample.DLL,產生Sample.DLL文件,以后就可以隨時調用了。
              三、在應用程序中調用DLL文件
              在應用程序中要首先裝入DLL后才能調用導出表中的函數,例如用MFC創建基于對話框的工
            程Test,并在對話框上放置"Load"按鈕,你就必須添加裝載代碼。
              1.首先在TestDlg.cpp的首部添加變量設置代碼:
              //設置全局變量gLibSample用于存儲DLL句柄
              HINSTANCE gLibSample=NULL;
              //第二個變量ShowMe是指向DLL庫中ShowMe()函數的指針
              typedef int( SHOWME)(void);

              SHOWME ShowMe;
              2.利用ClassWizard為"Load"按鈕添加裝載DLL的代碼:
              Void CTestDlg::OnLoadButton()
              { //要添加的代碼如下
               if(gLibMyDLL!=NULL)
               { MessageBox("The Sample.DLL has already been load.");
               return; }
               //裝載Sample.dll,未加路徑,將在三個默認路徑中尋找
               gLibSample=LoadLibrary("SAMPLE.DLL");
               //返回DLL中ShowMe()函數的地址
               ShowMe=(SHOWME)GetProcAddress(gLibSample,"ShowMe"); }
              3.只要DLL裝載成功,在應用程序中就可以直接調用ShowMe()函數(本程序在Windows 95,VC++5.0中運行通過)。
            posted on 2009-08-29 08:46 逛奔的蝸牛 閱讀(4928) 評論(0)  編輯 收藏 引用 所屬分類: Qt
            久久精品国产99久久丝袜| 久久精品国产日本波多野结衣| 久久天天躁狠狠躁夜夜网站| 欧美一区二区三区久久综| 热久久这里只有精品| 久久精品一本到99热免费| 久久91亚洲人成电影网站| 日本精品久久久久久久久免费| 亚洲国产一成人久久精品| 久久99精品久久久久久野外| 一本色道久久综合狠狠躁| 国产精自产拍久久久久久蜜| 久久久精品人妻一区二区三区蜜桃| 精品无码人妻久久久久久| 浪潮AV色综合久久天堂| 亚洲国产成人久久一区久久| 久久婷婷综合中文字幕| av无码久久久久久不卡网站| 伊人久久综合无码成人网 | 国产亚洲欧美成人久久片| 久久综合日本熟妇| 成人精品一区二区久久| 777米奇久久最新地址| 久久婷婷成人综合色综合| 影音先锋女人AV鲁色资源网久久 | 久久妇女高潮几次MBA| 久久精品国产亚洲一区二区三区| 波多野结衣中文字幕久久| 久久久国产精品亚洲一区| 97久久婷婷五月综合色d啪蜜芽| 久久这里只有精品视频99| 久久久久久国产精品无码下载| 一本久久久久久久| 亚洲国产精品久久久久婷婷软件 | 嫩草伊人久久精品少妇AV| 久久精品无码一区二区WWW| 亚洲欧美日韩久久精品| 国产精品一区二区久久精品涩爱| 一本久道久久综合狠狠躁AV| 亚洲国产成人精品91久久久| 久久综合久久美利坚合众国|