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