labwindowscvi7第八章 动态链接库和Windows SDK

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• • • • •
2010-112010-11-4
动态链接库
3. DLL和EXE的区别
• 内部结构相同 • DLL即使装载到内存中时,也不是运行程序。它 只是其它程序可以调用的过程与函数的集合。 这些过程与函数使用了调用程序的堆栈。 • 库不能建立自己的堆栈,而使用调用它的主程 序的堆栈。 • DLL的任何内存分配或建立的任何全局数据都驻 留在主程序的地址空间中
2010-112010-11-4
8/11
动态链接库
• 操作系统使用标准DLL搜索算法查找子DLL,搜索次序 如下:
用户载入程序的路径 当前工作路径 Windows 98/95下是Windows system目录,Windows NT/2000 是Windows system32和system目录。 Windows 目录 列在PATH环境变量中的目录
2010-1120பைடு நூலகம்0-11-4
动态链接库
• 在工程文件窗口选择Build>>Target Type>>Dynamic Link Library • 如果使用头文件法,在工程文件窗口选择 Build>>Target Settings… 并在exports中选择 Change按钮,出现DLL Export Option界面中选 择导出的头文件 • 创建可调试DLL或发布DLL。
kernel32.lib管理内存、进程和线程 gdi32.lib 绘图和显示文本 user32.lib 执行用户界面任务(如创建窗口和发送消息) advapi.lib 对象安全、注册表管理和事件记录

Windows.h在其它头文件的前面,避免定义冲突
11/11
3. 程序举例
2010-112010-11-4


如果把导入库列到工程文件中,或者用一个仪器驱动程序或 用户库的 .fp文件把它联系起来,LabWindows/CVI将把导入 库静态载入到可执行文件或DLL中,这种方式又叫隐式加载。 通过调用LoadExternalModule或Windows SDK LoadLibary函 数动态载入导入库,这种方式又叫做显示加载。不能直接把 DLL的路径名传递给LoadExternalModule,而是必须传递 DLL导入库的路径名。
LabWindows/CVI教程 LabWindows/CVI教程(7) 教程(7)
动态链接库和Windows 动态链接库和Windows SDK
主讲:乔立岩 主讲:
Email: qiaoliyan@hit.edu.cn (交作业) (交作业 交作业) qiaoliyan@msn.com(在线交流) MSN: qiaoliyan@msn.com(在线交流) Tel: 86413532 ext. 8611 (逸夫楼611) 逸夫楼611)
2010-112010-11-4 3/11
动态链接库
4. 创建DLL
• 按正常程序编写DLL源文件函数 • 每个DLL都要有一个入口函数DllMain(Borland 编译器使用DllEntryPoint实现相同的功能),用 它代替WinMain函数或Main函数 • 把需要外部调用的函数和变量导出
2010-112010-11-4
5/11
动态链接库
• 创建DLL的建议:
在需要导出的所有函数的声明和定义中使 用DLLSTDCALL宏,不要导出带有可变 数量参数的函数。 不要在DLL中导出变量。为每一个需要导 出的变量创建一个读取它的值的函数,或 者返回这个变量指针的函数。 在头文件中不要使用导入关键字。

使用LoadExternalModule显式加载DLL
在需要的时候调入,节省内存 反复调用影响效率
2010-112010-11-4
9/11
Windows SDK
1. 什么是Windows SDK
• Windows SDK:Windows Software Development Kit,Windows软件开发工具 • Windows SDK程序设计就是Windows API方式 的Windows程序设计 • Windows API:Windows Application Programming Interface,Windows应用程序编 程接口 • API就是一系列的例程,应用程序通过调用这些 例程来请求操作系统完成一些低级服务
自动化测试与控制研究所
DLL和SDK
1. 静态链接和动态链接
• • 静态链接是在链接时(生成EXE文件)把程序编译后的 代码插入到可执行文件中 动态链接时,链接器只插入数据表格,在可执行文件运 行前装入内存 节省内存 易于版本升级 易于复杂程序管理 多语言(字符)支持 独立于编程语言
2/11
2. DLL的优点
2010-112010-11-4 10/11
Windows SDK
2. 使用SDK
• • • 在LabWindows/CVI中安装Windows SDK 在程序中加入Windows SDK头文件, Windows.h 在工程文件中加入函数所在的导入库, LabWindows/CVI自动载入4个导入库
7/11
2010-112010-11-4
动态链接库
6. 使用DLL
• • LabWindows/CVI通过标准的32位导入库连接到DLL 链接导入库的方式:
把它列入到在工程中 用一个仪器驱动程序或用户库的 .fp文件把它联系起来 通过调用LoadExternalModule或Windows SDK LoadLibary函数 动态载入
2010-112010-11-4
6/11
动态链接库
5. 调试DLL
• 在调用DLL的工程文件中调试
打开调用DLL的工程文件 把编译好的DLL导引库文件(.lib)加入到调用DLL的工程文件 打开DLL源文件,不要加入到工程文件 在DLL源文件中设置断点进行调试

在DLL工程文件中调试
打开DLL工程文件 在工程文件窗口选择Run»Select External Process ,输入外部 调用DLL的可执行文件名 在DLL源文件中设置断点进行调试
头文件法(在头文件中定义) • int DLLSTDCALL MyIntFunc (void); • char *DLLSTDCALL MyStringFunc (void); 导出关键字法(在源文件中定义) • int DLLEXPORT DLLSTDCALL MyFunc (int parm) {} 4/11 • int DLLEXPORT myVar = 0;
相关文档
最新文档