【问题标题】:Imported global variable from dll not updated从 dll 导入的全局变量未更新
【发布时间】:2013-04-10 05:11:18
【问题描述】:

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

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

【问题讨论】:

    标签: windows winapi dll


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多