C/C++中動態鏈接庫的創建和調用

動態連接庫的創建步驟:

  一、創建Non-MFC DLL動態鏈接庫

  1、打開File —> New —> Project選項,選擇Win32 Dynamic-Link Library —>sample project

  —>工程名:DllDemo

  2、新建一個.h文件DllDemo.h

以下是引用片段:
  #ifdef DllDemo_EXPORTS
  #define DllAPI __declspec(dllexport)
  #else
  #define DllAPI __declspec(dllimport)
  extern"C"//原樣編譯
  {
      DllAPI int__stdcallMax(inta,intb);//__stdcall使非C/C++語言內能夠調用API
  }
  #endif

 

  3、在DllDemo.cpp文件中導入DllDemo.h文件,並實現Max(int,int)函數

以下是引用片段:
  #include"DllDemo.h"
  DllAPI int __stdcallMax(inta,intb)
  {
      if(a==b)
        returnNULL;
      elseif(a>b)
        return a;
   else
        return b;
  }

 

  4、編譯程序生成動態連接庫

  二、用.def文件創建動態連接庫DllDemo.dll。

  1、刪除DllDemo工程中的DllDemo.h文件。

  2、在DllDemo.cpp文件頭,刪除 #include DllDemo.h語句。

  3、向該工程中加入一個文本文件,命名爲DllDemo.def並寫入如下語句:

  LIBRARY MyDll

  EXPORTS

  Max@1

  4、編譯程序生成動態連接庫。

  動態鏈接的調用步驟:

  一、隱式調用

  1、 建立DllCnslTest工程

  2、 將文件DllDemo.dll、DllDemo.lib拷貝到DllCnslTest工程所在的目錄

  3、 在DllCnslTest.h中添加如下語句:

以下是引用片段:
  #define DllAPI __declspec(dllimport)
  #pragma comment(lib,"DllDemo.lib")//在編輯器link時,鏈接到DllDemo.lib文件
  extern"C"
  {
      DllAPI int __stdcallMax(inta,intb);
  }

 

  4、在DllCnslTest.cpp文件中添加如下語句:

以下是引用片段:
  #include"DllCnslTest.h"//或者#include"DllDemo.h"
  void main()
  {
      intvalue;
      value=Max(2,9);
      printf("TheMaxvalueis%d",value);
  }

 

  5、編譯並生成應用程序DllCnslTest.exe

  二、顯式調用

  1、 建立DllWinTest工程

  2、 將文件DllDemo.dll拷貝到DllWinTest工程所在的目錄或Windows系統目錄下。

  3、 用vc/bin下的Dumpbin.exe的小程序,查看DLL文件(DllDemo.dll)中的函數結構。

  4、 使用類型定義關鍵字typedef,定義指向和DLL中相同的函數原型指針。

  例:

以下是引用片段:
  typedef int(*lpMax)(inta,intb);//此語句可以放在.h文件中

 

  5、 通過LoadLibray()將DLL加載到當前的應用程序中並返回當前DLL文件的句柄。

  例:

以下是引用片段:
  HINSTANCEhDll;//聲明一個Dll實例文件句柄
  hDll = LoadLibrary("DllDemo.dll");//導入DllDemo.dll動態連接庫

 

  6、 通過GetProcAddress()函數獲取導入到應用程序中的函數指針。

  例:

以下是引用片段:
  lpMaxMax;
  Max=(lpMax)GetProcAddress(hDLL,"Max");
  intvalue;
  value=Max(2,9);
  printf("TheMaxvalueis%d",value);

 

  7、 函數調用完畢後,使用FreeLibrary()卸載DLL文件。

  FreeLibrary(hDll);

  8、 編譯並生成應用程序DllWinTest.exe

  注:顯式鏈接應用程序編譯時不需要使用相應的Lib文件。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章