學習了一下,中間還是有不少細節要注意,特此記錄
一:生成DLL
1:創建DLL工程
文件->新建->項目->visual c++->win32->win32控制檯應用程序(win32項目也可以)
填寫項目名稱MyDLL->確定->下一步->DLL(附加選項 對空項目打鉤)->完成。
到這裏DLL工程就創建完畢了,下面新建兩個文件MyDLL.cpp和MyDLL.h。
MyDLL.cpp內容如下:
- #include
- using namespace std;
- #include "MyDLL.h"
- int Add(int &a,int &b)
- {
- return a+b;
- }
MyDLL.h內容如下:
- #pragma once
- 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內容如下:
- #include "testMyDLL.h"
- #pragma comment(lib,"..\\debug\\MyDLL.lib")
- #include
- using namespace std;
- int main()
- {
- int a =3;
- int b =2;
- cout<<Add(a,b)<<endl;
- getchar();
- }
testMyDLL.h內容如下:
- #pragma once
- extern "C" _declspec(dllexport) int Add(int &a,int &b);
這裏需要注意testMyDLL.cpp文件中調用lib的這句話:
- #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")
在主工程中需要用到其他庫的位置加入庫的頭文件