日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C/C++中動態(tài)鏈接庫的創(chuàng)建和調(diào)用

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

宣化網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),宣化網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為宣化千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的宣化做網(wǎng)站的公司定做!

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

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

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++語言內(nèi)能夠調(diào)用API   
  8. }   
  9. #endif  

3、在DllDemo.cpp文件中導(dǎo)入DllDemo.h文件,并實現(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、編譯程序生成動態(tài)連接庫

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

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

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

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

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

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

動態(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時,鏈接到DllDemo.lib文件   
  3. extern "C"   
  4. {   
  5. DllAPI int __stdcall Max(int a,int b);   
  6. }  

4、在DllCnslTest.cpp文件中添加如下語句: #include "DllCnslTest.h"http://或者 #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加載到當前的應(yīng)用程序中并返回當前DLL文件的句柄。

例:

 
 
 
  1. HINSTANCE hDll; //聲明一個Dll實例文件句柄   
  2. hDll = LoadLibrary("DllDemo.dll");//導(dǎo)入DllDemo.dll動態(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)用程序編譯時不需要使用相應(yīng)的Lib文件。

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


網(wǎng)站名稱:C/C++中動態(tài)鏈接庫的創(chuàng)建和調(diào)用
標題網(wǎng)址:http://www.5511xx.com/article/djhgdjo.html