个人理解动态链接库是封装好的,其他人可以直接调用的一种接口,实现函数等的共享。
静态链接库和动态链接库在使用中的不同:
静态链接库:lib中的函数被连接,并且全部实现都被字节包含在最终生成的EXE文件中。
动态链接库:dll 不必包含在最终的exe 中,静态调用时仅把函数名、变量名、类名等链接到exe 文件中,只有在运行时才从动态库中导入到可执行文件中。动态调用时exe 文件执行时可以直接动态地引用和卸载 DLL 文件
静态链接库不可以再包含其他动态或者静态库,而动态链接库可以包含其他的动态或者静态库。
动态链接库包含三种:
- 非MFC动态库
- MFC规则动态库
- MFC扩展DLL
DLL函数分类:
- DLL导出函数(变量,类)可供应用程序调用
- DLL内部函数只能在DLL程序内使用,应用程序无法调用他们
导出函数的声明方式:
- 在函数声明类型和函数名之间加上"_declspec(dllexport)”
- 采用模块定义(.def)文件声明,需要在库工程中添加模块文件,格式如下:
- LIBRARY 库工程名称
- EXPORTS 导出函数名
DLL 的调用方式:
静态调用:由编译系统完成对DLL的加载和应用程序结束时DLL的卸载
- 拷贝对应的.dll、.lib、.h 文件到目标工程下
- 将这些文件包含到想对应的文件目录下
- 直接调用对应的函数即可
动态调用:由编程者用 API函数加载和卸载DLL(DLL加载-DLL函数地址获取-DLL释放)方式
- 拷贝对应的.dll、.lib、.h 文件到目标工程下
- 使用LoadLibrary() 获得句柄
- 使用GetProcAddress() 获取要调用的函数名