动态链接库创建与使用(学习笔记) .
来源:互联网 发布:mac 日历 软件 编辑:程序博客网 时间:2024/06/06 00:52
在学习过程中,一次次的感觉到dll文件的重要性,所以乘着这两天有时间,又把孙鑫老师的视频回顾了一遍,随便做了一下笔记,以供后续使用。
IDE:Visual C++ 6.0
创建动态链接库的方法
方法一:(单个*.cpp文件)
1. 新建dll工程
2. 添加C/C++源文件(c++)
3. 在源文件中,编写函数(每个函数结尾不需要‘;’)(如下图)
4. 在需要导出的函数前加 _declspec(dllexport)
5. 编译连接即可,获得dll和lib文件。
方法二:(添加一个*.h头文件)
方法三:(添加一个*.h头文件,并使该头文件可以被dll文件使用,也可以被用户使用)
当使用dll文件时,会将DLL1_API定义为export,供输出使用
当客户直接用.h文件时,会将DLL1_API定义为import,供输入使用
方法四:(导出类)
方法五:(导出类的部分域和方法)
方法六:(防止名字改编)
由上图可见,函数名字发生改编了。
这种改编和编译器相关,所以当同一个dll文件放到不同的编译器上时,就可能因为名字改编问题,使得函数不可以使用。
方法:使用extern “C”
结果如下:
Extern “C”不足:
l 只能导出全局函数,不能导出类和类的成员函数。
以下两种都出错。
l 调用约定发生变化时,名字改编就变化。
如将默认的C调用,改为标准调用_stdcall(即Pascal调用)
*.h文件中
*.cpp文件中
Dumpbin 结果如下,发生名字改编。
彻底消除名字改编,使用模块定义文件*.def
方法六:(使用*.def文件)
只要在工程中加入一个*.def文件,即可。
*.h文件,照样可以使用。
该*.def只是在生成动态链接库时使用,其它地方都不用。
Dumpbin结果如下:
没有发生名字改编
使用动态链接库的方法
隐式链接
1. 连接时,只需要提供引入库文件(*.lib)
2. 运行时,需要提供动态链接库文件(*.dll)
方法一:
1. 将lib文件复制到当前工程,工程à设置à连接,添加*.lib文件名
2. 程序中使用dll中函数前,用extern 函数声明
(以上两步,就可以保证使用dll文件中的函数时,编译连接不出错)
3. 将dll文件复制到当前工程,运行程序即可!
方法二:
基本同方法一,只是第二步改为:
不使用extern
使用_declspec(dllimport) (效率更高)
方法三:
基本同方法一,只是第二步改为:
不使用extern ,通过包含 *.h头文件,就省略了extern 、_declspec(dllimport)等声明了。
动态加载
方法四:
将*.dll拷贝到当前工程目录下,即可。
使用FreeLibrary释放dll文件
也可以使用MAKEINTRESOURCE宏
利用Dumpbin命令查看应用程序的输入:
可见,testDll中没有加载Dll2.dll文件,这个文件是在使用时动态加载的。
工具
Dumpbin 命令
l Dumpbin –exports *.dll
l Dumpbin –imports *.exe
如果没有设置环境变量,先运行VCVARS32.BAT文件。
Depends可视化工具
查看一个可执行模块(dll或exe文件)依赖的dll文件。
工具路径:开始--> 程序—>Microsoft Visual Studio 6.0 à Microsoft Visual C++ 6.0 Toolsà Depends
如果没有找到,可以到安装目录 “C:/Program Files/Microsoft Visual Studio/Common/Tools” 里面找。
- 动态链接库创建与使用(学习笔记)
- 动态链接库创建与使用(学习笔记) .
- Windows下动态链接库的创建与使用 学习笔记
- Linux - 创建与使用动态链接库
- 动态链接库的创建与使用
- 动态链接库的创建与使用
- 动态链接库(DLL)总结---动态链接库的创建与使用(5)
- 动态链接库DLL使用学习笔记
- NDK学习笔记:动态链接库与静态链接库的基本使用流程简记
- 动态链接库(.dll、.lib)与静态链接库(.lib)的创建与使用
- C# dll的创建与使用(动态链接库的创建和使用)
- 动态链接库(DLL)总结---静态链接库的创建与使用(4)
- (转贴)VC中创建与使用静态链接库和动态链接库
- 创建使用动态链接库
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- LINUX系统中动态链接库的创建与使用
- linux动态链接库的创建与使用
- Facebook数据仓库揭秘:RCFile高效存储结构
- 回溯_8皇后
- Event & Network 设计思考
- 【你知道么】90后们玩过体感游戏吗?
- 目录和文件管理
- 动态链接库创建与使用(学习笔记) .
- div添加滚动条
- Java中利用JMF编写摄像头拍照程序
- 获取Excel文件的sheet名(VB.NET)
- 关于android 获取手机号码的问题
- RDL和RDLC使用ReportViewer显示报表时筛选导出项
- ubuntu 11.04 拨号上网问题
- C# 跨线程操作控件的线程安全性方法
- 获取APK 包的相关信息PackageManager 第一部分