本文章相关视频教程下载地址http://pan.baidu.com/s/1slK2Hat
在动态库中定义的全局变量,可以在调用该动态库的程序中进行访问和修改。
1 在动态库中定义导出变量
在“VS2015动态库之入口函数”中创建的DLL程序的基础上,添加导出变量。
1.1 全局变量的定义
在dllmain.cpp源文件的起始位置处定义一个全局变量
unsigned int dllGlobalVar = 0;
1.2 全局变量的赋值
在dllMain()入口函数中,对其进行赋值:
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
dllGlobalVar = 100;
std::cout << "DLL_PROCESS_ATTACH.\n";
break;
1.3 全局变量的导出声明
为程序添加一个名为DLL_Variant_Test.def的定义文件,在该文将中将dllGlobalVar声明为导出变量
LIBRARY DLL_Variant_Test
EXPORTS
dllGlobalVar DATA
2 在调用动态库的程序中使用该变量
在“VS2015动态库之入口函数”中创建的调用动态库程序的基础上,添加对该变量的使用。
2.1 数据类型的定义
程序要访问动态库中的变量,即要获取该变量在动态库中的地址(指针)。dllGlobalVar的类型是unsigned int,因此其地址应该为unsigned int*。因此,在程序中首先有如下代码
typedef unsigned int* PUINT;
2.2 变量地址的获取
通过GetProcAddress()函数获取该变量的地址
PUINT dllGlobalVar = (PUINT)GetProcAddress(hinstLib, "dllGlobalVar");
该行代码应该放在LoadLibrary()函数之后使用。
2.3 变量的访问及修改
在获取了dllGlobalVar变量的地址之后,可以直接对其进行访问或者对其进行修改。
cout<<*dllGlobalVar;
*dllGlobalVar = 200;
cout<<*dllGlobalVar;
以上代码中,第一次输出的值是100,第二次输出的值是200。