自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C/C++中動(dòng)態(tài)鏈接庫的創(chuàng)建和調(diào)用

開發(fā) 后端
動(dòng)態(tài)鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL 是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫,DLL不是可執(zhí)行文件。本文介紹的是動(dòng)態(tài)鏈接庫的創(chuàng)建和調(diào)用,一起來看。

DLL 有助于共享數(shù)據(jù)和資源。多個(gè)應(yīng)用程序可同時(shí)訪問內(nèi)存中單個(gè)DLL 副本的內(nèi)容。DLL 是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫。下面為你介紹C/C++中動(dòng)態(tài)鏈接庫的創(chuàng)建和調(diào)用。

動(dòng)態(tài)連接庫的創(chuàng)建步驟:

一、創(chuàng)建Non-MFC DLL動(dòng)態(tài)鏈接庫

1、打開File —> New —> Project選項(xiàng),選擇Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo

2、新建一個(gè)。h文件DllDemo.h

  1. #ifdef DllDemo_EXPORTS   
  2. #define DllAPI __declspec(dllexport)   
  3. #else   
  4. #define DllAPI __declspec(dllimport)   
  5. extern "C" //原樣編譯   
  6. {   
  7. DllAPI int __stdcall Max(int a,int b); //__stdcall使非C/C++語言內(nèi)能夠調(diào)用API   
  8. }   
  9. #endif  

3、在DllDemo.cpp文件中導(dǎo)入DllDemo.h文件,并實(shí)現(xiàn)Max(int,int)函數(shù) #include "DllDemo.h"

  1. DllAPI int __stdcall Max(int a,int b)   
  2. {   
  3. if(a==b)   
  4. return NULL;   
  5. else if(a>b)   
  6. return a;   
  7. else   
  8. return b;   
  9. }  

4、編譯程序生成動(dòng)態(tài)連接庫

二、用.def文件創(chuàng)建動(dòng)態(tài)連接庫DllDemo.dll

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

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

3、向該工程中加入一個(gè)文本文件,命名為DllDemo.def并寫入如下語句:

  1. LIBRARY MyDll  
  2. EXPORTS  
  3. Max@1 

4、編譯程序生成動(dòng)態(tài)連接庫。

動(dòng)態(tài)鏈接的調(diào)用步驟:

一、隱式調(diào)用

1、建立DllCnslTest工程

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

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

  1. #define DllAPI __declspec(dllimport)   
  2. #pragma comment(lib,"DllDemo.lib") //在編輯器link時(shí),鏈接到DllDemo.lib文件   
  3. extern "C"   
  4. {   
  5. DllAPI int __stdcall Max(int a,int b);   
  6. }  

4、在DllCnslTest.cpp文件中添加如下語句: #include "DllCnslTest.h"//或者 #include "DllDemo.h"

  1. void main()   
  2. {   
  3. int value;   
  4. value = Max(2,9);   
  5. printf("The Max value is %d\n",value);   
  6. }  

5、編譯并生成應(yīng)用程序DllCnslTest.exe

二、顯式調(diào)用

1、建立DllWinTest工程。

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

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

4、使用類型定義關(guān)鍵字typedef,定義指向和DLL中相同的函數(shù)原型指針。

例:

  1. typedef int(*lpMax)(int a,int b); //此語句可以放在.h文件中  

5、通過LoadLibray()將DLL加載到當(dāng)前的應(yīng)用程序中并返回當(dāng)前DLL文件的句柄。

例:

  1. HINSTANCE hDll; //聲明一個(gè)Dll實(shí)例文件句柄   
  2. hDll = LoadLibrary("DllDemo.dll");//導(dǎo)入DllDemo.dll動(dòng)態(tài)連接庫  

6、通過GetProcAddress()函數(shù)獲取導(dǎo)入到應(yīng)用程序中的函數(shù)指針。

例:

  1. lpMax Max;   
  2. Max = (lpMax)GetProcAddress(hDLL,"Max");   
  3. int value;   
  4. value = Max(2,9);   
  5. printf("The Max value is %d",value);  

7、函數(shù)調(diào)用完畢后,使用FreeLibrary()卸載DLL文件。

  1. FreeLibrary(hDll);  

8、編譯并生成應(yīng)用程序DllWinTest.exe

注:顯式鏈接應(yīng)用程序編譯時(shí)不需要使用相應(yīng)的Lib文件。

動(dòng)態(tài)鏈接提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。通過使用 DLL,程序可以實(shí)現(xiàn)模塊化,由相對(duì)獨(dú)立的組件組成。希望通過本文的分析,你會(huì)對(duì)此有了解。

【編輯推薦】

  1. 淺談C++調(diào)用C#的DLL程序方法
  2. 輕松清除DLL木馬只需5步驟
  3. 實(shí)例講解如何利用Excel清除DLL木馬
  4. DLL劫持漏洞 Photoshop也中標(biāo)
  5. 完全清除DLL后門的實(shí)際操作流程
責(zé)任編輯:于鐵 來源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2009-08-05 16:29:18

C#調(diào)用C++動(dòng)態(tài)鏈接

2010-02-01 17:37:35

C++調(diào)用C鏈接庫

2024-03-01 20:59:11

C#DLL開發(fā)

2012-01-06 10:25:50

JavaDLLC++

2009-08-28 16:19:30

C#實(shí)現(xiàn)修改動(dòng)態(tài)鏈接庫

2023-03-15 15:58:11

Python動(dòng)態(tài)庫C++

2021-09-01 05:11:13

C# 動(dòng)態(tài)鏈接庫

2011-06-21 18:02:14

Qt 動(dòng)態(tài) 鏈接庫

2023-11-29 08:31:20

PythonRust

2023-05-09 08:24:11

JNA鏈接庫代碼

2010-03-01 09:43:09

Python編程語言

2023-08-02 10:10:00

C#C++

2019-08-28 14:21:39

C++C接口代碼

2020-07-31 18:33:56

C++編程語言

2012-05-04 08:24:14

LinuxUnix

2012-05-08 14:48:23

LinuxUnix動(dòng)態(tài)鏈接庫

2024-06-06 08:53:13

動(dòng)態(tài)鏈接庫共享庫

2011-08-02 14:15:05

XCode 靜態(tài) 鏈接庫

2009-07-07 20:57:20

LinuxUnix動(dòng)態(tài)鏈接庫

2011-06-08 14:42:33

C++多維數(shù)組
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)