我使用__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 回答
当你构建一个简单的测试项目时,你的问题中的代码就像你期望的那样 . 所以,这里有两个我可以编写的解释:
您正在执行可执行文件中的
UpdateStatusData
副本 . 因此,DLL中所做的UpdateStatusData
值的更改不会反映在副本中 .由于某种原因,您的DLL不会修改结构 .