DLL中导出全局变量的方法及导入时需要注意的问题
来源:互联网 发布:sai mac中文版破解 编辑:程序博客网 时间:2024/06/07 02:07
今天做程序需要导出DLL中的一个全局指针,可是导出后只要一使用就会发生access violation,后来在网上找了找文章,原来是之前导入方法存在问题,下面把整个DLL导出导入全局函数的方法整理一下,作为记录。整个文章大部分参考http://www.pconline.com.cn/pcedu/empolder/gj/vc/0509/699672_7.html,这篇文章写的很不错,有兴趣的可以看看。
全局变量的导出方法:
全局变量在DLL中的定义和使用方法与一般的程序设计是一样的。若要导出某全局变量,需要在.def文件的EXPORTS后添加:
变量名 CONSTANT //过时的方法
或
变量名 DATA //VC++提示的新方法
全局变量的导入及使用方法:
extern int dllGlobalVar;
printf("%d ", *(int*)dllGlobalVar);
*(int*)dllGlobalVar = 1;
特别要注意的是用extern intdllGlobalVar声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须通过强制指针转换来使用DLL中的全局变量。这一点,从*(int*)dllGlobalVar可以看出。因此在采用这种方式引用DLL全局变量时,千万不要进行这样的赋值操作:
dllGlobalVar = 1; 其结果是dllGlobalVar指针的内容发生变化,程序中以后再也引用不到DLL中的全局变量了。
在应用工程中引用DLL中全局变量的一个更好方法是:
extern int _declspec(dllimport) dllGlobalVar; //用_declspec(dllimport)导入
通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,建议在一切可能的情况下都使用这种方式。这时如下的赋值操作就可以直接使用:
dllGlobalVar = 1; //这里就可以直接使用, 无须进行强制指针转换
- DLL中导出全局变量的方法及导入时需要注意的问题
- VC++中DLL中全局变量的导出和导入
- 动态链接库(DLL)导出:需要注意的问题
- SQL Server数据导入、导出需要注意的问题
- j2ee高并发时使用全局变量需要注意的问题
- idea中导入github项目中需要注意的问题
- dll共享段中一些需要注意的问题
- dll共享段中一些需要注意的问题
- C#中使用Random方法时需要注意的问题
- 使用List中remove方法时需要注意的问题
- 重写方法时需要注意的问题
- 大数据量导出到Excel时需要注意的问题
- 大数据量导出到Excel时需要注意的问题
- DLL中类的导出和导入
- c++/clr DLL调用MFC DLL需要注意的问题
- Vector中作为全局变量时注意的问题(转)
- DLL中导出全局变量
- 面试中需要注意的一些问题及准备
- 程序员的酒文化
- EJB一个常见错误的原因。
- 应用服务器的综合性能调优
- “顶嵌杯”嵌入式系统C编程大赛,报名就送500元大礼!
- Js——代码位置不同,效果不同。
- DLL中导出全局变量的方法及导入时需要注意的问题
- 输入一个字符串,要求找出字符串中最大子串的长度
- winCE6.0 目录下工程的编译顺序
- JSF的相关链接,学习JSF最好的内容
- OpenGL 在 Delphi 中 关于设备上下文函数
- Java日期类常用方法
- 从AP中获取电池和电源信息变更通知的方法
- DM9000A网卡芯片介绍
- grails 中返回 json