动态链接库通常不能直接运行,也不能接受消息。他们是一些独立的文件,其中包括可被执行程序或者其他DLL调用来完成某项工作的函数。
WINAPI提供的3个重要DLL:
Kernel32.dll:包含管理内存,进程和线程的函数
User32.dll:包含那些用于执行用户界面的任务的函数,如窗口的创建和消息的发送
GDI32.dll:包含那些用于画图和显示文本的函数
静态库:函数和数据被编译进一个二进制文件(*.LIB),使用静态库的情况下,在编译可执行文件时,链接器会从库中复制这些函数和数据并把他们和应用程序的其他文件组合起来创建最终的可执行文件(*.EXE)。
动态库:使用动态库要提供两个文件,引入库文件(*.lib)和DLL文件(*.dll)。引入库文件包含dll导出的函数和变量的符号名,dll包含实际的函数和数据,就如同引入库只是论文的摘要,而dll是论文真正内容。使用动态库的时候,编译链接可执行文件时,只需要链接该dll的引入库文件,并不复制函数和数据到可执行文件,程序运行时才会加载dll,然后映射到进程的地址空间,然后访问dll中的函数。
发布产品:静态库不需要提供额外的dll,只需要发布程序;而动态库要发布程序和依赖的动态库DLL
1)可以采用多种编程语言编写
2)增强产品的功能
3)提供二次开发的平台
4)简化项目管理
5)可以节省磁盘空间
6)有助于资源的共享
7)有助于实现程序的本地化
隐式链接和显式链接
如下实例:
#define DLL1_API extern "C" _declspec(dllexport) //cpp文件也可以使用头文件了,变成了导出dll函数的声明了 #include "Win32Dll1.h" #include "windows.h" #include "stdio.h" /*_declspec(dllexport) */int /*_stdcall*/ add(int a, int b) { return a+b; } /*_declspec(dllexport) */int /*_stdcall*/ sub(int a, int b) { return a-b; }
原文:http://blog.csdn.net/comwise/article/details/21776311