DLL的部署和使用[VS2010-2012]
DLL(Dynamic Link Library)动态链接库, 直观讲就是封装起来的一堆函数,编译成二进制,来进行组件化,模块化,同时防止了技术泄露(most important …)。
DLL的使用分两种形式:
- 写代码来调用;
- 设置项目属性来调用。
写代码调用就是在代码中写:
HMODULE procad = LoadLibrary(...);
这种方法类似于使用链表代替数组,会优化程序但是增加编程复杂度,也容易出错,不建议普通程序使用。这里只介绍DLL的自动链接.
- 放文件:首先将你的DLL和对应的LIB文件都放到DEBUG生成目录下。
- 添加库目录:
依次进入->解决方案(solution)->项目属性(properties)->链接器(Linker)
属性中有一个附加库目录(additional library directory)
在里面加入你当前工程的DEBUG目录,就是你刚才放DLL的地方。 - 添加LIB文件:在 链接器linker->输入input 的属性中添加附加依赖项(additional dependences):
添加如下: $(TargetDir)\你的LIB.lib 【注释1】 - 最后 将LIB 和 DLL加入工程:右键你的工程->加入(add)->已有文件(existing) 把你放在Debug里面的lib和dll加进来。
- (可选)加个头文件:如果你很清楚你的DLL里有什么函数,你就可以直接用函数名正常调用了,但是大多数情况DLL里面函数很多,程序员习惯于在工程里添加一个头文件,里面写了DLL函数声明。一般来说,给你的dll都会给你配套的 lib 和 头文件。另外,一些环境下还必须有头文件声明,才能让编译器在DLL中寻找函数实现,
my_dll_name.h void _API_ __stdcall_ printHello(); int _API_ __stdcall_ getBigger(int a,int b); .......
专业的开发人员称此方法为(隐式调用),不易理解记忆。建议朋友们记 “自动调用”,不用写代码 ,将另一种需要写代码的调用记 “手动调用”。
【注释1】$(TargetDir)
就是你的输出文件夹,工程当前是Debug模式,所以输出到debug。就像其他程序一样,他们的dll是和exe等文件放在一块的,只要在一个目录下,就可以找到dll。程序"错误:找不到xxxx.dll"
的现象就是因为dll不在文件夹下。当然也可以把它设置成D:\ProgramFiles\ 但是如果你的用户没有D盘,(像我一哥们),就没办法了。