vc中dll导出导入简单教程
来源:互联网 发布:淘宝开店卖什么挣钱 编辑:程序博客网 时间:2024/05/22 16:45
dll和lib的区别
未完待续
如何导出dll
查阅msdn官方文档发现,导出dll有三种方式,一种是使用.def文件导出,另一种是在代码中使用宏__declspec(dllexport)导出,最后一种是配置vc工程的属性,使用LINK 命令中的 /EXPORT 规范
一,使用.def文件导出
模块定义 (.def) 文件是包含一个或多个描述 DLL 各种特性的 Module 语句的文本文件。
.def 文件必须至少包含下列模块定义语句:
1,文件中的第一个语句必须是 LIBRARY 语句。 此语句将 .def 文件标识为属于 DLL。 LIBRARY 语句的后面是 DLL 的名称。 链接器将此名称放到 DLL 的导入库中。
2,EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。 通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。 当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。
步骤:
我们先创建一个win32控制台工程,然后在工程目录下添加.h和.cpp文件,内容如下:
//dll_export.hextern int global_value;int getTestDllValue();
//dll_export.cppint global_value = 255;int getTestDllValue(){ return 128;}
然后新建一个.def文件,放到工程目录下,命名为def_dll_export.def,内容如下(这里对.def的注释非常疑惑,如下的注释,在使用该dll时居然得不到global_value的值,把注释去掉就可以拿到值了。。。但是看msdn文档,这样注释又是没有问题的,保险起见,我还是不加注释了。。)
LIBRARY def_dll_export.dllEXPORTS ;此处导出的是函数getTestDllValue;导出数据要指定DATA关键字global_value DATA
然后将.def文件加入到工程中,在属性页中进行如下配置
因为我们是生成dll,所以还要进行如下修改
然后编译运行,成功后,在debug/release目录可以找到生成的dll和lib文件,然后我们就可以拿去用了。
二,使用宏__declspec(dllexport)导出
未完待续
三,使用LINK 命令中的 /EXPORT 规范
未完待续
如何使用dll
在程序中调用dll中的函数有两种方式,一种是通过lib文件给出的函数地址从dll中调用,另一种是直接通过函数名调用dll中的函数。
一,使用.lib和.h
首先将导出dll时使用的头文件,生成的lib库文件和dll文件放到工程目录下,并把头文件加入到工程中,然后在调用时加入类似下面的代码
#include "dll_export.h"#pragma comment(lib, "def_dll_export.lib");
注意,lib的相对路径要配置好。然后就可以调用相关的函数了。
int _tmain(int argc, _TCHAR* argv[]){ int i = getTestDllValue(); printf("%d", i); return 0;}
二,直接调用dll函数
关于操作dll相关的函数我们可以查阅msdn的文档,链接
这里我只用到三个函数,分别是LoadLibrary(),GetProcAddress(),FreeLibrary(),函数的意义在名字上体现的很好了,不多说了,说下用法,如下
#include <Windows.h>int _tmain(int argc, _TCHAR* argv[]){ //加载dll,注意相对路径 auto dllFunc = LoadLibrary(_T("def_dll_export.dll")); if (dllFunc) { //声明函数指针,和导出dll时头文件中函数类型一致 typedef int (*myfunc)(); myfunc pMyFunc; //通过函数名获取函数在dll中的地址 pMyFunc = (myfunc)GetProcAddress(dllFunc, "getTestDllValue"); if (pMyFunc != NULL) { //调用函数 int j = pMyFunc(); printf("value:%d", j); } //释放对dll的引用 FreeLibrary(dllFunc); } return 0;}
- vc中dll导出导入简单教程
- VC++中DLL中全局变量的导出和导入
- VC 编译器 dll导入导出 (MSDN摘抄)
- DLL中类的导出和导入
- Vc dll中导出类的方法
- VC中DLL导出函数时注意事项
- 将matlab中数据导出VC导入
- 简单导入导入导出宏,实现DLL的导入与导出
- dll导入和导出
- dll导入和导出
- Dll导入导出
- DLL导出、导入
- dll导入导出
- dll导出导入类
- VC DLL导出函数
- VC++ DLL 导出函数
- VC++ DLL 导出函数
- 导入vc的dll
- JDBC工具类的封装以及运用
- 7招提高你的营销能力
- 升级cocoapods 0.36.0之后,解决更新的部分依赖库,不是最新版本的问题
- 第2周项目1-三角形类1
- 通用定義對話框
- vc中dll导出导入简单教程
- 经纬度坐标转换为屏幕坐标
- ZBar 二维码扫描(自定义区域扫描)
- button
- 设计模式入门-策略模式(php版)
- iOS NSNotification的使用
- golang学习之安装环境
- JVM:加载、链接和初始化
- Linux命令总结(持续更新)