vs創建和調用dll和lib經驗

學習了一下,中間還是有不少細節要注意,特此記錄

一:生成DLL

1:創建DLL工程

      文件->新建->項目->visual c++->win32->win32控制檯應用程序(win32項目也可以)

      填寫項目名稱MyDLL->確定->下一步->DLL(附加選項 對空項目打鉤)->完成。

      到這裏DLL工程就創建完畢了,下面新建兩個文件MyDLL.cpp和MyDLL.h。

      MyDLL.cpp內容如下:


  1. #include  
  2. using namespace std; 
  3. #include "MyDLL.h" 
  4.  
  5. int Add(int &a,int &b) 
  6.     return a+b;  

      MyDLL.h內容如下:  


  1. #pragma once 
  2.  
  3. extern "C" __declspec(dllexport) int Add(int &a,int &b); 

     點擊生成,則dll文件就生成了,vs2008不能直接生成lib文件,這個時候就需要我們在建立dll工程的時候 再新建一個def文件,默認生成然後重新生成就能夠得到lib文件了,但可以通過修改工程屬性裏面的general->project default->configure type修改爲lib,就可以生成lib文件。

注意:如果在已存在的工程上創建dll或者lib,不需要修改工程,只要把工程屬性裏面的general->project default->configure type修改爲lib或者dll,就可以生成lib文件或者dll文件了


二:調用DLL

新建兩個文件testMyDLL.cpp和testMyDLL.h

 

testMyDLL.cpp內容如下:


  1. #include "testMyDLL.h" 
  2. #pragma comment(lib,"..\\debug\\MyDLL.lib") 
  3.  
  4. #include  
  5. using namespace std; 
  6.  
  7. int main() 
  8.     int a =3; 
  9.     int b =2; 
  10.     cout<<Add(a,b)<<endl; 
  11.  
  12.     getchar(); 
  13.  

testMyDLL.h內容如下:


  1. #pragma once 
  2.  
  3. extern "C" _declspec(dllexport) int Add(int &a,int &b); 

這裏需要注意testMyDLL.cpp文件中調用lib的這句話:


  1. #pragma comment(lib,"..\\debug\\MyDLL.lib") 

這裏需要指明lib所在的文件夾,當然我們也可以在生成dll的MyDLL工程中,指定lib和dll文件的輸出路徑,直接到testMyDLL工程下。

上例中的testMyDLL.h也可以使原來創建的時候那個頭文件,由此供外部調用

注意:如果只有dll文件,那麼必須在程序裏面調用LoadLibrary()函數才能使用,如果有lib文件,那麼有兩種方式可以馬上進行調用:

 

(1). Dependencies (推薦使用,要求有lib源代碼)

   一個項目被分成多個工程來做,一個主工程exe,其他爲靜態庫lib

    Project-->dependencies,設置主工程的依賴爲其他靜態庫lib

    這時,主工程的Resource Files中自動添加了lib

    在主工程中需要用到其他庫的位置加入庫的頭文件

 

 

(2). 直接將lib添加到需要用的工程中(不太推薦,lib沒能統一管理)

    提供了lib和其頭文件

    選擇工程-->右鍵-->Add Files to Project

    這時,主工程的Resource Files中自動添加了lib

    在主工程中需要用到其他庫的位置加入庫的頭文件

 

(3).  通過工程的Link設置(推薦,lib可以統一管理)

     提供了lib和其頭文件

     Project-->settings-->Link,選擇Categery中的Input

     在object/library modules裏輸入的動態鏈接庫對應的.lib文件名

     在Additional library path中輸入動態鏈接庫對應的.lib的路徑

     在主工程中需要用到其他庫的位置加入庫的頭文件

 

(4).  #pragma (lib, "filename.lilb")(不太推薦,lib沒能統一管理)

      提供了lib和其頭文件

      在主工程中需要用到其他庫的位置加入#pragma (lib, "filename.lilb")

      在主工程中需要用到其他庫的位置加入庫的頭文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章