1、dll文件是什麼
dll即dynamic link library(動態鏈接庫)的簡稱,在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可使用多個DLL文件,一個DLL文件也可能被多個應用程序使用。
2、dll的功能
通過使用dll,程序可以實現模塊化,由相對獨立的組件組成。例如,一個應用程序可以在運行時將各個模塊加載到主程序中。由於模塊之間是彼此獨立的,所以程序的加載速度更快,而且模塊只在相應的功能被請求時才加載。此外,可以通過簡單的替換相應的dll文件完成對應用程序的升級,而不會影響該程序的其他部分。
3、查看已有dll文件的內容:
3.1 dumpbin命令(在VS2010的命令提示符中使用)
3.2 reflector軟件
4、dll文件的創建(利用VS2010)
4.1、新建win32應用程序,應用程序類型選擇dll,附加選項勾選“導出符號”
4.2、在dllTest.h中添加如下代碼:
DLLTEST_API void printMax(int &,int &);
4.3、在dllTest.cpp中的示例函數下面添加如下代碼:
DLLTEST_API void printMax(int &a,int &b)
{
cout<<"max num is:"<<(a > b ? a:b)<<endl;
}
4.4、然後生成解決方案
5、dll文件的使用
5.1、隱式鏈接
通過在應用程序中使用關鍵字#pragma和_declspec(dllimport),實現調用dll中的函數
示例代碼如下:
dllTest.lib放到存放.cpp,.h文件的目錄下
dllTest.dll放到Debug目錄下(EXE文件所在路徑)
#include <iostream>
#pragma comment(lib,"dllTest.lib")
_declspec(dllimport) void printMax(int &,int &);
int main()
{
int m = 3,n = 100;
printMax(m,n);
return 0;
}
5.2 顯式鏈接
使用顯示鏈接時,原dll中函數需要用extern "C" _declspec(dllexport)加以修飾
extern "C" _declspec(dllexport) void printMax(int &a,int &b)
{
cout<<"max num is:"<<(a > b ? a:b)<<endl;
}
在應用程序中這樣調用:
把dllTest.dll文件拷貝到當前工程的Debug目錄下
#include<Windows.h>
#include<iostream>
void main(void)
{
int m = 3,n = 5;
typedef void(*pMax)(int &a,int &b);
HINSTANCE hDLL;
pMax Max;
hDLL = LoadLibrary("dllTest.dll");
Max=(pMax)GetProcAddress(hDLL,"printMax");
Max(m,n);
FreeLibrary(hDLL);
}