VS2015动态库编程之导出变量

xiaoxiao2021-02-27  221

本文章相关视频教程下载地址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

转载请注明原文地址: https://www.6miu.com/read-10794.html

最新回复(0)