久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【動態(tài)鏈接庫】VC++2010中創(chuàng)建和使用動態(tài)鏈接庫dll

 昵稱y8F2YCzG 2015-04-24

一,、動態(tài)鏈接庫簡介



動態(tài)鏈接庫英文為DLL,,是Dynamic Link Library 的縮寫形式,,DLL是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫
,DLL不是可執(zhí)行文件,。動態(tài)鏈接提供了一種方法,,使進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于
一個 DLL 中,,該 DLL 包含一個或多個已被編譯,、鏈接并與使用它們的進程分開存儲的函數(shù)。DLL 還有助于共享數(shù)據(jù)和
資源,。多個應(yīng)用程序可同時訪問內(nèi)存中單個DLL 副本的內(nèi)容,。DLL 是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫。

dll優(yōu)點和作用:


    1,、擴展了應(yīng)用程序的特性,;
  2、可以用許多種編程語言來編寫,;
  3,、簡化了軟件項目的管理;
  4,、有助于節(jié)省內(nèi)存,;
  5、有助于資源共享,;
  6、有助于應(yīng)用程序的本地化,; 


二,、創(chuàng)建并使用動態(tài)鏈接庫




1.使用_declspec(dllexport)關(guān)鍵字導出函數(shù),使用靜態(tài)調(diào)用dll

    在VisualStudio工程向?qū)е薪⒁粋€Windows Console Application,在“應(yīng)用程序類型”選項中選擇DLL,,在“附加選項”中選擇空項目,。如下:


    在項目中添加cpp文件,加入代碼如下:

  1. /**********************************************/  
  2. /*FileName:DllDemo.cpp                        */  
  3. /**********************************************/  
  4.   
  5. #define DllDemoAPI _declspec(dllexport)  
  6. #include "DllDemo.h"  
  7. #include <stdio.h>  
  8.   
  9. DllDemoAPI int add(int a, int b)  
  10. {  
  11.     return a+b;  
  12. }  
  13.   
  14. DllDemoAPI int subtract(int a, int b)  
  15. {  
  16.     return a-b;  
  17. }  
  18.   
  19. DllDemoAPI int multiple(int a, int b)  
  20. {  
  21.     return a*b;  
  22. }  
  23.   
  24. DllDemoAPI void Point::Print(int x, int y)  
  25. {  
  26.     printf("x=%d,y=%d",x,y);  
  27. }  


    在項目中添加.h頭文件,,加入代碼如下:

    

  1. /**********************************************/  
  2. /*FileName:DllDemo.h                          */  
  3. /**********************************************/  
  4.   
  5. #ifdef DllDemoAPI  
  6. #else  
  7. #define DllDemoAPI _declspec(dllimport)  
  8. #endif  
  9.   
  10. DllDemoAPI int add(int a, int b);  
  11. DllDemoAPI int subtract(int a, int b);  
  12. DllDemoAPI int multiple(int a, int b);  
  13.   
  14. class DllDemoAPI Point  
  15. {  
  16. public:  
  17.     void Print(int x, int y);  
  18. };  


    編輯,,生成,可以看到Debug目錄里生成了以下這些文件:
    
    
    調(diào)用dll:
    新建一個控制臺應(yīng)用程序,,取名InvokeDll,,如下圖:
    在InvokeDll.cpp中添加以下代碼:
    

  1. // InvokeDll.cpp : 定義控制臺應(yīng)用程序的入口點。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <Windows.h>  
  6. #include "..\DllDemo\DllDemo.h"  
  7.   
  8. int _tmain(int argc, _TCHAR* argv[])  
  9. {  
  10.     /*加載dll函數(shù)調(diào)用方式為默認調(diào)用方式*/  
  11.        
  12.     printf("5+3=%d\n",add(5,3));   
  13.   
  14.     Point p;  
  15.     p.Print(5,3);  
  16.       
  17.       
  18.     return 0;  
  19. }  


    
    選擇InvokeDll項目,,點擊右鍵,,選擇“屬性”選項,在“鏈接”選擇的字選項“輸入”|“外部依賴項”中添加DemoDll.lib
    
    編譯運行得結(jié)果:
    

2.通過應(yīng)用程序定義文件,,并動態(tài)調(diào)用


    在VisualStudio工程向?qū)е薪⒁粋€Windows Console Application,,在“應(yīng)用程序類型”選項中選擇DLL,在“附加選項”中選擇空項目,。
    在項目中添加cpp文件,,加入代碼如下:

  1. /**********************************************/  
  2. /*FileName:DllDemo.cpp                        */  
  3. /**********************************************/  
  4.   
  5. #define DllDemoAPI _declspec(dllexport)  
  6. #include "DllDemo.h"  
  7. #include <stdio.h>  
  8.   
  9. DllDemoAPI int add(int a, int b)  
  10. {  
  11.     return a+b;  
  12. }  
  13.   
  14. DllDemoAPI int subtract(int a, int b)  
  15. {  
  16.     return a-b;  
  17. }  
  18.   
  19. DllDemoAPI int multiple(int a, int b)  
  20. {  
  21.     return a*b;  
  22. }  


    在項目中添加.def頭文件,加入代碼如下:

  1. LIBRARY DllDemo  
  2.   
  3. EXPORTS  
  4. add  
  5. subtract  
  6. multiple  

    

    編輯,,生成,,可以看到Debug目錄里生成了以下這些文件:
    
    
    調(diào)用dll:
    同上,新建一個控制臺應(yīng)用程序,,取名InvokeDll
    在InvokeDll.cpp中添加以下代碼:
    
    

  1. #include "stdafx.h"  
  2. #include <Windows.h>   
  3.   
  4. int _tmain(int argc, _TCHAR* argv[])  
  5. {  
  6.     /*加載dll函數(shù)調(diào)用方式為默認調(diào)用方式*/  
  7.     HINSTANCE hInst = LoadLibrary(L"DllDemo.dll");  
  8.     if(!hInst)  
  9.     {  
  10.         printf("加載MathFuns.dll失敗!\n");  
  11.     }  
  12.     typedef int (*DllDemoAPIProc)(int a, int b);  
  13.     DllDemoAPIProc Add = (DllDemoAPIProc)::GetProcAddress(hInst,"add");  
  14.     printf("5+3=%d\n",Add(5,3));  
  15.     ::FreeLibrary(hInst);  
  16.       
  17.       
  18.     return 0;  
  19. }  


      
    編譯運行得結(jié)果:



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多