0

我正在使用 __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;

我正在计时器响应中读取这些数据,但没有获得更新的值。

4

1 回答 1

0

您问题中的代码与您在构建到一个简单的测试项目时所期望的一样。所以,这是我可以编造的两种解释:

  1. 您正在UpdateStatusData您的可执行文件中获取副本。因此,UpdateStatusData对 DLL 中值的更改不会反映在副本中。
  2. 由于某种原因,您的 DLL 没有修改结构。
于 2013-04-17T13:23:11.760 回答