成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
動態鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL 是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。本文介紹的是動態鏈接庫的創建和調用,一起來看。

DLL 有助于共享數據和資源。多個應用程序可同時訪問內存中單個DLL 副本的內容。DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。下面為你介紹C/C++中動態鏈接庫的創建和調用。

動態連接庫的創建步驟:

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

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

2、新建一個。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++語言內能夠調用API   
  8. }   
  9. #endif  

3、在DllDemo.cpp文件中導入DllDemo.h文件,并實現Max(int,int)函數 #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、編譯程序生成動態連接庫

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

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

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

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

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

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

動態鏈接的調用步驟:

一、隱式調用

1、建立DllCnslTest工程

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

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

  1. #define DllAPI __declspec(dllimport)   
  2. #pragma comment(lib,"DllDemo.lib") //在編輯器link時,鏈接到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、編譯并生成應用程序DllCnslTest.exe

二、顯式調用

1、建立DllWinTest工程。

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

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

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

例:

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

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

例:

  1. HINSTANCE hDll; //聲明一個Dll實例文件句柄   
  2. hDll = LoadLibrary("DllDemo.dll");//導入DllDemo.dll動態連接庫  

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

例:

  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、函數調用完畢后,使用FreeLibrary()卸載DLL文件。

  1. FreeLibrary(hDll);  

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

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

動態鏈接提供了一種方法,使進程可以調用不屬于其可執行代碼的函數。通過使用 DLL,程序可以實現模塊化,由相對獨立的組件組成。希望通過本文的分析,你會對此有了解。

【編輯推薦】

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

2009-08-05 16:29:18

C#調用C++動態鏈接

2010-02-01 17:37:35

C++調用C鏈接庫

2024-03-01 20:59:11

C#DLL開發

2012-01-06 10:25:50

JavaDLLC++

2009-08-28 16:19:30

C#實現修改動態鏈接庫

2023-03-15 15:58:11

Python動態庫C++

2021-09-01 05:11:13

C# 動態鏈接庫

2011-06-21 18:02:14

Qt 動態 鏈接庫

2023-11-29 08:31:20

PythonRust

2010-03-01 09:43:09

Python編程語言

2023-05-09 08:24:11

JNA鏈接庫代碼

2023-08-02 10:10:00

C#C++

2020-07-31 18:33:56

C++編程語言

2019-08-28 14:21:39

C++C接口代碼

2012-05-04 08:24:14

LinuxUnix

2012-05-08 14:48:23

LinuxUnix動態鏈接庫

2024-06-06 08:53:13

動態鏈接庫共享庫

2011-08-02 14:15:05

XCode 靜態 鏈接庫

2011-06-08 14:42:33

C++多維數組

2009-07-07 20:57:20

LinuxUnix動態鏈接庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 最新黄色在线观看 | 狠狠av | 亚州精品天堂中文字幕 | 久久精品国产一区二区三区 | 成人免费视频播放 | 午夜久久久久久久久久一区二区 | 欧美中文字幕一区 | 日韩在线观看一区 | 亚洲看片网站 | 美国十次成人欧美色导视频 | 亚洲先锋影音 | 蜜桃视频在线观看免费视频网站www | 成人在线视频网 | 国产伊人精品 | 日韩国产精品一区二区三区 | 精品久久精品 | 免费久久网 | 7777精品伊人久久精品影视 | 国产激情一区二区三区 | aaa在线| 久久婷婷国产麻豆91 | 欧美多人在线 | 99爱在线观看 | 日韩欧美在线免费观看视频 | 亚洲精品456 | 国产亚洲一区二区三区在线观看 | 激情的网站| 色888www视频在线观看 | 午夜精品 | 精品久久国产 | 久久久久亚洲精品国产 | 综合久久av| 亚洲视频二区 | 7777久久| 日韩在线免费 | 一道本一区二区 | 91精品国产一区二区在线观看 | 欧美一区二区三区在线观看视频 | 免费成年网站 | 日本一区二区高清不卡 | 久久久久久久综合 |