亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

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

2020-05-23 14:04:24
字體:
來源:轉載
供稿:網友
下面小編就為大家帶來一篇淺析C/C++中動態鏈接庫的創建和調用。小編覺得挺不錯的,現在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
 

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

動態連接庫的創建步驟:

創建Dll有兩種方式。

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

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

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

#ifdef DllDemo_EXPORTS  #define DllAPI __declspec(dllimport)  #else  #define DllAPI __declspec(dllexport) 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并寫入如下語句:

1.LIBRARY MyDll  
2.EXPORTS  
3.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/n",value);  }

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

二、顯式調用

1、建立DllWinTest工程。

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

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

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

例:

//需要引入頭文件 windows.h最好在最前面,否則可能會出錯  不需要windef.h 否則會報錯 #include <windows.h>#include <iostream> 
typedef int(__stdcall *lpMax)(int a,int b); //此語句可以放在.h文件中 必須聲明為__stdcall類型 否則出錯

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

例:

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

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

例:

lpMax M;  M = (lpMax)GetProcAddress(hDLL,"Max");  int value;  value = M(2,9);  std::cout<<value<<std::endl; 

注:上述代碼中 Max = (lpMax)GetProcAddress(hDLL,"Max"); 其中參數”Max"為函數名稱,可能無法找到(可能和未使用模塊定義文件有關)。此時,可用兩種方法解決

1、利用vs自帶的命令行工具,查看函數的正確名稱,首先cd 到bin目錄(vc/bin),利用的是vs自帶的dumpbin.exe工具。進入bin目錄之后,輸入命令dumpbin /exports d:/路徑/xxx.dll,查看函數的輸出名稱。通常為_FunctionName@數字,此例中的名稱為_Max@8.

2、根據函數在dll(生成dll的頭文件中的順序),例如 Max = (lpMax)GetProcAddress(hDLL,(LCPSTR)MAKEINTRESOURCE(1)); //找到第一個函數

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

FreeLibrary(hDll); 

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

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

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

以上這篇淺析C/C++中動態鏈接庫的創建和調用就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
韩国美女主播一区| 国产99视频精品免视看7| 亚洲欧美综合精品久久成人| 97高清免费视频| 一区二区在线免费视频| 国产性猛交xxxx免费看久久| 97精品久久久中文字幕免费| 午夜精品一区二区三区av| 不卡av日日日| 在线国产精品播放| 亚洲精品aⅴ中文字幕乱码| 国产精品www网站| 亚洲欧洲自拍偷拍| 亚洲第一色中文字幕| 久久综合88中文色鬼| 国产精品偷伦一区二区| 亚洲精品影视在线观看| 亚洲欧美中文日韩在线v日本| 成人网址在线观看| 中文在线资源观看视频网站免费不卡| 久久天天躁狠狠躁夜夜躁| 91精品国产免费久久久久久| 国产日韩欧美夫妻视频在线观看| 国产精品男女猛烈高潮激情| 日韩国产一区三区| 亚洲欧美色婷婷| 国产精品海角社区在线观看| 久久精品国产2020观看福利| 欧美日韩国产激情| 欧美一区二粉嫩精品国产一线天| 成人黄色网免费| 午夜精品在线观看| 亚洲精品国产福利| 国产精品一区二区久久精品| 久久久久久久久国产| 亚洲成人免费在线视频| 丝袜美腿亚洲一区二区| 国内精品久久影院| 一区二区三区国产在线观看| 久久久精品视频在线观看| 色偷偷888欧美精品久久久| 久久99视频免费| 国产精品观看在线亚洲人成网| 欧美大肥婆大肥bbbbb| 亚洲a在线播放| 久久精品视频导航| 国产视频丨精品|在线观看| 亚洲综合中文字幕68页| 日韩黄在线观看| 久久夜色精品亚洲噜噜国产mv| 欧美性猛交xxxx免费看久久久| 岛国精品视频在线播放| 亲爱的老师9免费观看全集电视剧| 久久精品99久久久香蕉| 亚洲精品乱码久久久久久金桔影视| 国产91色在线免费| 国模极品一区二区三区| 国产精品美女免费| 欧美黄色片在线观看| 日韩av观看网址| 午夜欧美大片免费观看| 久久国产精品久久久久久| 成人午夜小视频| 日韩精品免费综合视频在线播放| 亚洲福利视频久久| 一个人看的www久久| 精品久久久久久久久久久| 成人高清视频观看www| 欧美激情久久久久久| 亚洲最大的网站| 成人h片在线播放免费网站| 欧美专区福利在线| 成人精品视频99在线观看免费| 欧美激情在线播放| 久久精品国产v日韩v亚洲| 热99精品里视频精品| 久久久亚洲欧洲日产国码aⅴ| 国产精品亚洲欧美导航| 亚洲影影院av| 少妇高潮久久久久久潘金莲| 2019中文字幕在线观看| 亚洲国产精久久久久久| 一区二区av在线| 午夜美女久久久久爽久久| 亚洲一区二区免费| 日韩在线视频观看正片免费网站| 久久天天躁狠狠躁夜夜av| 萌白酱国产一区二区| 成人在线播放av| 国产在线久久久| 成人精品一区二区三区电影免费| 国产精品美女主播在线观看纯欲| 91高清视频免费| 国产综合视频在线观看| 欧美视频免费在线| 亚洲国产精品大全| 成人午夜在线观看| 久久天堂电影网| 日韩高清av一区二区三区| 91免费观看网站| 国产精品女主播| 亚洲精品乱码久久久久久按摩观| 欲色天天网综合久久| 成人国产在线激情| 成人福利网站在线观看11| 国产精品91久久| 成人国产精品一区二区| 91av在线播放视频| 亚洲风情亚aⅴ在线发布| 精品一区二区亚洲| 亚洲www永久成人夜色| 亚洲最大的成人网| 奇门遁甲1982国语版免费观看高清| 欧美一级大胆视频| 亚洲最大成人在线| 国产成人精品最新| 国产精品视频大全| 91chinesevideo永久地址| 久久久av网站| 欧美精品在线免费| 久久精品国产免费观看| 92福利视频午夜1000合集在线观看| 国外成人免费在线播放| 亚洲自拍高清视频网站| 国产精品视频永久免费播放| 高清亚洲成在人网站天堂| 久久精彩免费视频| 亚洲欧美日韩图片| 在线亚洲国产精品网| 日韩中文字幕免费| 日韩亚洲欧美中文高清在线| 51视频国产精品一区二区| 精品一区电影国产| 亚洲小视频在线| 亚洲综合社区网| 一本色道久久88亚洲综合88| 亚洲国产日韩欧美在线图片| 国产一区二区色| 久久国产精品电影| 久久人人爽人人爽人人片亚洲| 国产亚洲欧洲黄色| 国产91网红主播在线观看| 成人黄色在线免费| 草民午夜欧美限制a级福利片| 久久久国产一区二区三区| 91久久久久久| 青青草原成人在线视频| 亚洲人成电影网站| 亚洲精品成人免费| 亚洲护士老师的毛茸茸最新章节| 成人福利在线视频| 精品调教chinesegay| 精品久久久久久国产| 久久久精品在线观看| 成人有码在线播放| 国内免费久久久久久久久久久| 国产精品久久久久久亚洲影视| 国产精品老牛影院在线观看| 美女扒开尿口让男人操亚洲视频网站| 精品国产一区二区在线| 日韩中文字幕在线观看| 成人黄色午夜影院| 亚洲自拍av在线| 亚洲欧美另类自拍|