• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用VC++5.0定制和調用動態鏈接庫

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    楊 波 通常我們在調用DLL時所需的DLL文件必須位于以下三個目錄之一: (1) Windows 的系統目錄:\ windows \system; (2)DOS中path所指出的任何目錄; (3)程序所在的目錄。 一、動態鏈接庫的結構 動態鏈接庫中定義有兩種函數:導出函數(export function)和內部
    楊 波

      通常我們在調用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中運行通過)。
      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>