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);
}