DLL和共享变量

时间:2016-04-22 13:41:58

标签: c++ windows visual-studio winapi dll

我有一个Dll(C ++),它包含一个data_seg,用于在其他程序中共享变量。它工作,许多程序正在使用它(30+)。问题是我将这个库添加到一个新项目中,但是我尝试访问的变量从不改变它的值。我必须重新启动程序,现在它与其他程序同步,我可以看到变量的最后一个值。任何线索?

谢谢。

1 个答案:

答案 0 :(得分:1)

您不提供太多信息 - 例如您如何声明变量或如何修改它们。我假设你已经像在MSDN文档中那样正确地编写了它:

https://msdn.microsoft.com/en-us/library/h90dkhs0%28v=vs.90%29.aspx?f=255&MSPPError=-2147217396

根据您的描述 - 变量仅在应用程序重启后才会同步,我只能怀疑您有一些缓存问题。我建议你让你的变量变化,并使用原子来修改/读取它们。

例如:

#pragma data_seg("Shared")
volatile LONG g_mydata = 0;
#pragma data_seg()

#pragma comment(linker, "/Section:Shared,RWS")

现在修改g_mydata(递增1):

InterlockedExchangeAdd((PLONG)&g_mydata, 1);