DLL中导出全局变量的方法及导入时需要注意的问题
2009-12-22 14:37
507 查看
今天做程序需要导出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 int
dllGlobalVar声明所
导入的并不是DLL中全局变量本身,而是其地址
,应用程序必须通过强制指针转换来使用DLL中的全局变量。这一点,从*
(int*)dllGlobalVar可以看出。因此在采用这种方式引用DLL全局变量时,千万不要进行这样的赋值操作:
dllGlobalVar = 1; 其结果是dllGlobalVar指针的内容发生变化,程序中以后再也引用不到DLL中的全局变量了。
在应用工程中引用DLL中全局变量的一个更好方法
是:
extern int _declspec(dllimport) dllGlobalVar
; //用_declspec(dllimport)导入
通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,建议在一切可能的情况下都使用这种方式。这时如下的赋值操作就可以直接使用:
dllGlobalVar = 1; //这里就可以直接使用, 无须进行强制指针转换
全局变量的导出
方法:
全局变量在DLL中的定义和使用方法与一般的程序设计是一样的。若要导出某全局变量,需要在.def文件的EXPORTS后添加:
变量名 CONSTANT
//过时的方法
或
变量名 DATA
//VC++提示的新方法
全局变量的导入
及使用
方法:
extern int dllGlobalVar;
printf("%d ", *(int*)dllGlobalVar);
*(int*)dllGlobalVar = 1;
特别要注意的是用extern int
dllGlobalVar声明所
导入的并不是DLL中全局变量本身,而是其地址
,应用程序必须通过强制指针转换来使用DLL中的全局变量。这一点,从*
(int*)dllGlobalVar可以看出。因此在采用这种方式引用DLL全局变量时,千万不要进行这样的赋值操作:
dllGlobalVar = 1; 其结果是dllGlobalVar指针的内容发生变化,程序中以后再也引用不到DLL中的全局变量了。
在应用工程中引用DLL中全局变量的一个更好方法
是:
extern int _declspec(dllimport) dllGlobalVar
; //用_declspec(dllimport)导入
通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,建议在一切可能的情况下都使用这种方式。这时如下的赋值操作就可以直接使用:
dllGlobalVar = 1; //这里就可以直接使用, 无须进行强制指针转换
相关文章推荐
- SQL Server数据导入、导出需要注意的问题
- j2ee高并发时使用全局变量需要注意的问题
- 动态链接库(DLL)导出:需要注意的问题
- 用vs编译动态库需要注意的问题,全局变量初始化
- VC++中DLL中全局变量的导出和导入
- DataTable数据导入到Excel 引用Microsoft Office 12.0 Object Library和 Microsoft Excel 14.0 Object Library 并且需要注意的问题
- DLL导入导出STL类对象导致崩溃的问题
- JavaScript类型转换方法及需要注意的问题小结(挺全面)
- 主程序与DLL之间的全局变量问题
- VC中创建DLL,导出全局变量,函数和类
- 动态加载DLL的方法与注意的问题
- 【struts2】开发过程中遇到的需要注意的小问题的原因与解决方法
- PowerDesigner16.5快速入门显示,注释comment配置方法,以及创建sql文件过程中需要注意的一些问题
- 开发板-PC机(宿主机)-虚拟机(VM)之间网络通信设置方法及需要注意的问题
- DLL中导出全局变量
- VS2008编译环境下全局const变量在其他编译模块中引用注意的问题
- 在c#里调用C++的dll时,需要注意的一些问题
- 按照一定的规格形式导出需要的数据(导出功能实现和一些需要注意的问题)
- python中将函数赋值给变量时需要注意的一些问题
- c++引用全局变量应注意的问题