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