程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++中動態鏈接庫的創建和調用

C/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 __stdcall Max(int a,int b); //__stdcall使非C/C++語言內能夠調用API
  }
  #endif   3、在DllDemo.cpp文件中導入DllDemo.h文件,並實現Max(int,int)函數 以下是引用片段:
  #include "DllDemo.h"
  DllAPI int __stdcall Max(int a,int b)
  {
  if(a==b)
  return NULL;
  else if(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 __stdcall Max(int a,int b);
  }   4、在DllCnslTest.cpp文件中添加如下語句: 以下是引用片段:
  #include "DllCnslTest.h"//或者 #include "DllDemo.h"
  void main()
  {
  int value;
  value = Max(2,9);
  printf("The Max value is %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)(int a,int b); //此語句可以放在.h文件中   5、 通過LoadLibray()將DLL加載到當前的應用程序中並返回當前DLL文件的句柄。   例: 以下是引用片段:
  HINSTANCE hDll; //聲明一個Dll實例文件句柄
  hDll = LoadLibrary("DllDemo.dll");//導入DllDemo.dll動態連接庫   6、 通過GetProcAddress()函數獲取導入到應用程序中的函數指針。   例: 以下是引用片段:
  lpMax Max;
  Max = (lpMax)GetProcAddress(hDLL,"Max");
  int value;
  value = Max(2,9);
  printf("The Max value is %d",value);   7、 函數調用完畢後,使用FreeLibrary()卸載DLL文件。
     FreeLibrary(hDll);   8、 編譯並生成應用程序DllWinTest.exe   注:顯式鏈接應用程序編譯時不需要使用相應的Lib文件。
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved