DLL中导出全局变量
1. DEF文件
1 EXPORTS 2 3 g_nTest DATA ;导出全局变量 4 5 GetGlobalVar ;导出函数
2. 调用
1 extern int g_nTest; //声明 2 3 int main(int argc, char *argv[]) 4 { 5 *(int*)g_nTest = 1; //注意前面的转换 6 7 return 0; 8 }
需要注意的是用 extern int g_nTest 声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须通过强制指针转换来使用DLL中的全局变量。这一点,从
*(int*)g_nTest 可以看出。
3. 更好的调用
1 extern int _declspec(dllimport) g_nTest; //用_declspec(dllimport)导入 2 int main(int argc, char *argv[]) 3 { 4 g_nTest = 1; //可以直接使用, 无须进行转换 5 6 return 0; 7 }
通过 _declspec(dllimport) 方式导入的是全局变量本身,而不再是其地址了。