来自dll的导入的全局变量未更新

时间:2013-04-17 12:29:01

标签: windows winapi dll

我使用__declspec(dllexport)从dll导出一个全局变量,并使用__declspec(dllimport)在客户端exe中导入它。

dll中的全局变量正在一个单独的线程中随时间更新。我想在我的客户端.exe中收到这个更新的数据,但我没有得到它。我每次使用客户端exe中的计时器读取数据时,得到的是全局变量的唯一初始值。

这种行为的解释是什么?我能做些什么来实现我想要达到的目标?是否有一个选项,不包括来自dll的get()和set()导出函数?

以下是从dll导出的代码:

typedef struct{
    int iTotalQueues;
    int iCurrentQueue;
    wchar_t szQueueName[100];
}UPDATE_STATUS_DATA;

__declspec(dllexport) UPDATE_STATUS_DATA UpdateStatusData;

此结构成员在循环中更新很长时间。更新代码在dll本身。

以下是exe:

中导入的代码
typedef struct{
    int iTotalQueues;
    int iCurrentQueue;
    wchar_t szQueueName[100];
}UPDATE_STATUS_DATA;

__declspec(dllimport) UPDATE_STATUS_DATA UpdateStatusData;

我正在计时器响应中读取此数据,而不是获取更新的值。

1 个答案:

答案 0 :(得分:0)

您的问题中的代码,正如您在构建一个简单的测试项目时所期望的那样。所以,这里有两个我可以编写的解释:

  1. 您正在执行可执行文件中的UpdateStatusData副本。因此,DLL中所做的UpdateStatusData值的更改不会反映在副本中。
  2. 由于某种原因,您的DLL不会修改结构。