链接库初学(一)
来源:互联网 发布:淘宝短信客户生日祝福 编辑:程序博客网 时间:2024/06/05 16:13
静态链接库:在链接时(生成可执行文件时)将编译后的代码插入到可执行文件中。
动态链接库:在链接时,只插入数据表格,在可执行文件运行前装入内存。
DLL的优点
1、节省内存(需要的时候再装入内存,不需要的时候再释放掉)
2、易于版本升级(只更改函数体,不修改接口)
3、易于复杂程序管理(这也是一种代码分配管理方式)
4、多语言(字符)支持(可以方便地切换有相同的接口不同的链接库?)
5、独立于编程语言(是,它和可执行文件的内部结构相同)
DLL vs EXE
1、内部结构 相同
2、DLL即使装载到内存中也不是应用程序。
DLL只是可供其他程序 调用的过程和函数集合;这些过程和函数使用了调用它的主程序堆栈
进一步,DLL的任何内存分配或建立的任何全局数据都驻留在主程序的地址空间中
如何达到上面说的效果呢(机制)?
如何制作静态链接库与动态链接库?
1、DLL源函数,正常方式;
2、每个DLL都需要一个入口函数DllMain(Borland是DllEntryPoint),代替正常EXE的WinMain或Main
3、需要外部调用的函数和变量导出
A. 头文件法(头文件中定义)
int DLLSTDCALL MyIntFuc(void);
char* DLLSTDCALL MyStringFuc(void);
B. 导出关键字法(源文件中定义)
int DLLEXPORT DLLSTDCALL MyFuc(params) {}
int DLLEXPORT myVar = 0;
4、其他
A. VS6.0新建一个
NEW⇒Projects⇒Win32 Dynamic-Link Library
B.??/?/????//
在工程文件窗口选择Build>>Target Type>>Dynamic Link Library
如果使用头文件法,在工程文件窗口选择Build>>Target Settings… 并在exports中选择Change按钮,出现DLL Export Option界面中选择导出的头文件创建可调试DLL或发布DLL。
5、创建DLL的建议:
A
在需要导出的所有函数的声明和定义中使用DLLSTDCALL宏,不要导出带有可变数量参数的函数。
B
不要在DLL中导出变量。为每一个需要导出的变量创建一个读取它的值的函数,或者返回这个变量指针的函数。
C
在头文件中不要使用导入关键字。
如何查看动态链接库里的函数,调用DLL函数?
在调用DLL的工程文件中调试
打开调用DLL的工程文件
把编译好的DLL导引库文件(.lib)加入到调用DLL的工程文件
打开DLL源文件,不要加入到工程文件
在DLL源文件中设置断点进行调试
在DLL工程文件中调试
打开DLL工程文件
在工程文件窗口选择Run»Select External Process ,输入外部调用DLL的可执行文件名
在DLL源文件中设置断点进行调试
动态链接库
使用DLL
LabWindows/CVI通过标准的32位导入库连接到DLL
链接导入库的方式:
把它列入到在工程中
用一个仪器驱动程序或用户库的 .fp文件把它联系起来
通过调用LoadExternalModule或Windows SDK LoadLibary函数动态载入
如果把导入库列到工程文件中,或者用一个仪器驱动程序或用户库的 .fp文件把它联系起来,LabWindows/CVI将把导入库静态载入到可执行文件或DLL中,这种方式又叫隐式加载。
通过调用LoadExternalModule或Windows SDK LoadLibary函数动态载入导入库,这种方式又叫做显示加载。不能直接把DLL的路径名传递给LoadExternalModule,而是必须传递DLL导入库的路径名。
动态链接库
操作系统使用标准DLL搜索算法查找子DLL,搜索次序如下:
用户载入程序的路径
当前工作路径
Windows 98/95下是Windows system目录,Windows NT/2000是Windows system32和system目录。
Windows 目录
列在PATH环境变量中的目录
使用LoadExternalModule显式加载DLL
在需要的时候调入,节省内存
反复调用影响效率
Windows SDK
什么是Windows SDK
Windows SDK:Windows Software Development Kit,Windows软件开发工具
Windows SDK程序设计就是Windows API方式的Windows程序设计
Windows API:Windows Application Programming Interface,Windows应用程序编程接口
API就是一系列的例程,应用程序通过调用这些例程来请求操作系统完成一些低级服务
Windows SDK
使用SDK
在LabWindows/CVI中安装Windows SDK
在程序中加入Windows SDK头文件, Windows.h
在工程文件中加入函数所在的导入库,LabWindows/CVI自动载入4个导入库
kernel32.lib管理内存、进程和线程
gdi32.lib 绘图和显示文本
user32.lib 执行用户界面任务(如创建窗口和发送消息)
advapi.lib 对象安全、注册表管理和事件记录
Windows.h在其它头文件的前面,避免定义冲突
- 链接库初学(一)
- HTML初学---超链接(链接)
- 初学XML(一)
- flex初学(一)
- Java初学(一)
- 初学MFC (一)
- 初学XML(一)
- 初学ios(一)
- 初学smarty(一)
- opencv初学(一)
- PS初学(一)
- 初学libcurl(一)
- HTML初学(一)
- Linux初学(一)
- siwft初学(一)
- 初学opencv(一)
- 初学MongoDB(一)
- 初学ucosII(一)
- 结识新朋友
- 今日开博,望多捧场
- DataTable.Compute强大的功能
- CPU学习 (Cache Coherence)
- CM域名终于可以注册,附一些3位数字米!
- 链接库初学(一)
- JavaScript的事件处理机制
- PHP和MySQL Web开发电子书及源码
- directshow 发布问题
- Apache Commons Logging日志与Log4j
- 今天又是一个新的开始。。。
- SOCKET TCP的简单应用
- 解决Office2007每次启动时出现配置进度的问题office盗版提示解决办法
- JS操作XML工具类-XmlUtils