DLL中导出全局变量
2010-05-21 17:01
363 查看
DLL定义的全局变量可以被调用进程访问;DLL也可以访问调用进程的全局数据,我们来看看在应用工程中引用DLL中变量的例子(单击此处下载本工程)。
;文件名:lib.def
;在DLL中导出变量
从lib.h和lib.cpp中可以看出,全局变量在DLL中的定义和使用方法与一般的程序设计是一样的。若要导出某全局变量,我们需要在.def文件的EXPORTS后添加:
变量名 CONSTANT //过时的方法
或
变量名 DATA //VC++提示的新方法
在主函数中引用DLL中定义的全局变量:
特别要注意的是用extern int dllGlobalVar声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须通过强制指针转换来使用DLL中的全局变量。这一点,从*(int*)dllGlobalVar可以看出。因此在采用这种方式引用DLL全局变量时,千万不要进行这样的赋值操作:
其结果是dllGlobalVar指针的内容发生变化,程序中以后再也引用不到DLL中的全局变量了。
在应用工程中引用DLL中全局变量的一个更好方法是:
通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,笔者建议在一切可能的情况下都使用这种方式。
#ifndef LIB_H #define LIB_H extern int dllGlobalVar; #endif #include "lib.h" #include <windows.h> int dllGlobalVar; BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: dllGlobalVar = 100; //在dll被加载时,赋全局变量为100 break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } |
;在DLL中导出变量
LIBRARY "dllTest" EXPORTS dllGlobalVar CONSTANT ;或dllGlobalVar DATA GetGlobalVar |
变量名 CONSTANT //过时的方法
或
变量名 DATA //VC++提示的新方法
在主函数中引用DLL中定义的全局变量:
#include <stdio.h> //加载静态链接库dllTest.lib #pragma comment(lib,"dllTest.lib") extern int dllGlobalVar; int main(int argc, char *argv[]) { printf("%d ", *(int*)dllGlobalVar); *(int*)dllGlobalVar = 1; printf("%d ", *(int*)dllGlobalVar); return 0; } |
dllGlobalVar = 1; |
在应用工程中引用DLL中全局变量的一个更好方法是:
#include <stdio.h> #pragma comment(lib,"dllTest.lib") extern int _declspec(dllimport) dllGlobalVar; //用_declspec(dllimport)导入 int main(int argc, char *argv[]) { printf("%d ", dllGlobalVar); dllGlobalVar = 1; //这里就可以直接使用, 无须进行强制指针转换 printf("%d ", dllGlobalVar); return 0; } |
相关文章推荐
- VC中创建DLL,导出全局变量,函数和类
- DLL中导出全局变量的方法及导入时需要注意的问题
- VC中创建DLL,导出全局变量,函数和类
- DLL中导出全局变量
- VC中创建DLL,导出全局变量,函数和类(隐式调用)
- VC中创建DLL,导出全局变量,函数和类
- DLL导出全局变量在多个DLL中调用
- 全局变量的声明和定义 以及dll中全局变量的导出
- 解析VC中创建DLL,导出全局变量,函数和类的深入分析
- VC中创建DLL,导出全局变量,函数和类 (转)
- VC++中DLL中全局变量的导出和导入
- dll和exe的共享节------多进程共享dll/exe全局变量
- dll使用全局变量的疑问
- 从DLL中导出变量 (显示加载、隐式加载)
- 静or动态库中的全局变量被不同的dll调用修改,其值是否独立?
- MFC 基础:静态加载DLL ,main()、main全局变量、dllMain()、dllMain全局变量的一些说明
- 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用
- 由ActiveX DLL中的全局变量想到的...
- DLL入门浅析(3)——从DLL中导出变量
- DLL导出变量