_18静态库与动态链接库 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:www.bcdaren.com 联系QQ:1250121864 QQ交流群 :49759272 联系电话:0512-57882866
1、静态库 静态链接:是指在编译链接阶段,链接器将目标库的代码复制过来,形成最终的exe文件 库1 Obj1 Obj2 Obj3 库2 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 1、静态库 静态链接:是指在编译链接阶段,链接器将目标库的代码复制过来,形成最终的exe文件 库1 Obj1 Obj2 Obj3 库2 Linker EXE
2、静态链接库的使用 1、将生成的.h与.lib文件复制到项目根目录,然后在代码中引用: #include "xxxx.h" #pragma comment(lib, "xxxx.lib") 2、将xxxx.H与xxxx.LIB文件复制到VC6安装目录,与库文件放在一起 C:\Program Files\Microsoft Visual Studio\VC98\Include(xxxx.h) C:\Program Files\Microsoft Visual Studio\VC98\Lib(xxxx.lib) 然后在工程->设置->连接->对象/库模块中添加xxxx.lib 模块->编译->链接->运行
3、动态库 动态链接:在编译链接阶段,链接器并不会将库文件的内容复制过去, 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 3、动态库 动态链接:在编译链接阶段,链接器并不会将库文件的内容复制过去, 而是只在最终的EXE文件中保留关键的信息,使得程序在加载运行时能够 找到对应库中的对于函数 1、目的 2、学习方法
4、系统中常见的动态库及格式 kernel32.dll、user32.dll、gdi32.dll 各类.sys驱动 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 4、系统中常见的动态库及格式 kernel32.dll、user32.dll、gdi32.dll 各类.sys驱动 1、目的 2、学习方法
5、创建动态链接库 1、extern "C" _declspec(dllexport) 调用约定 返回类型 函数名 (参数列表); 2、使用.def文件: EXPORTS 函数名 @编号 函数名 @编号 NONAME 使用序号导出的好处: 名字是一段程序就精华的注释,通过名字可以直接猜测到函数的功能 通过使用序号,可以达到隐藏的目的 导出表
6、使用动态链接库 步骤1: //定义函数指针,如: typedef int (__stdcall *lpPlus)(int,int); 步骤1: //定义函数指针,如: typedef int (__stdcall *lpPlus)(int,int); 步骤2: //声明函数指针变量,如: lpPlus myPlus; 步骤3: //动态加载dll到内存中,如: HINSTANCE hModule = LoadLibrary("DllDemo.dll"); 步骤4: //获取函数地址,如: myPlus = (lpPlus)GetProcAddress(hModule, "Plus"); 步骤5: //调用函数,如: int a = myPlus(10,2); 步骤6: //释放动态链接库,如: FreeLibrary(hModule);
7、静/动态态链接库的优缺点 静态库的优点: 1、程序运行时快,不需要再去解析导入表等繁琐步骤 动态库优点: 1、节约内存 2、灵活方便 3、可以拓展程序的功能 静态库缺点: 1、使用静态链接生成的可执行文件体积较大 动态库缺点: 1、程序运行时需要解析导入表,然后还要加载、映射dll文件,会造成程序启 动时反应迟钝 2、给病毒带来了可乘之机 模块->编译->链接->运行
昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 8、课后练习 见线上班