_18静态库与动态链接库 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:

Slides:



Advertisements
Similar presentations
Oracle数据库 Oracle 子程序.
Advertisements

C++程序设计 主讲:王兴波教授 1.
远程教育站点管理 及齐鲁先锋平台的使用 平阴县党员干部现代远程教育中心.
第二十九章 DLL / LIB函式庫開發 當我們開發程式到一個階段之後,我們一定會希望各個Component的程式碼可以分開的越清楚越好。而這一章最主要就是要告訴各位讀者,我們常在Windows系統中看到的dll或是lib的檔案該怎麼實作?做出這樣的library我們又該如何運用?為什麼使用dll或是lib有利於我們開發程式?以上這些疑問都將會在這一章中得到解答。
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
SDL2 配置 (Windows + Visual Studio)
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 字符编码 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
$9 泛型基础.
_01Win32简介与IDE简介 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
本节内容 消息的分发 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C语言程序示例: 1.输入10个数,按从小到大的顺序排序。 2.汉诺塔问题。.
第二章 Java基本语法 讲师:复凡.
_04Combox控件和ListBox控件的使用
_05MessageMap的原理 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
物件導向程式設計 CH2.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
编译OpenSSL 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件的基本操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Private Memory 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
动态链接库 主讲人:孙鑫
第一章 C语言概述 目录 什么是语言、程序 C语言的历史与发展 C语言的书写形式与程序结构 运行C语言的步骤与方法
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 线性地址的管理 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
计算机程序设计 小应用工具设计 1.
本节内容 模块隐藏 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_17注册表的基本操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二章 Java基本语法 讲师:复凡.
3.1私有内存的分配.
本节内容 消息的接收 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 学习路线 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第二章 Java基本语法 讲师:复凡.
本节内容 结构体.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
_07多连接之select模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第1章程序设计和C语言.
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
MFC的六大核心 机制 命令传递 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
_01自己实现简单的消息处理框架模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司
Windows开机密码的获取 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 如何调试驱动程序? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
编程达人-- 从零开始学UI系列教程 第九节、布尔运算 先行者 YC.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

_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、课后练习 见线上班