在链接到两个exe的dll中共享全局变量

时间:2018-06-25 15:02:44

标签: c++ windows

exe1exe2静态链接到test.dll

//test.dll
MyComplexObject obj;
void func()
{
   //initialize obj
}
void update()
{
   //update obj
}
// other functions that use obj


//exe1
func();

//exe2
update();

问题是exe2将具有obj的单独副本,因此update()实际上不会更新由obj初始化的exe1。我想将更新部分保留在testdll中,而又不想导出obj

注意:exe1是一个Windows服务,它将继续运行,而exe2是一个独立的应用程序,可以多次启动和关闭。

是否可以从obj更新exe2

编辑:我知道Windows上不再支持使用data_seg,因此不可能在会话之间共享数据。

我的问题归结为跨不同dll实例(由exe加载)的dll中的变量共享。像boost.interprocess这样的进程间通信是唯一可靠的方法,还是存在类似且不涉及boost的事物?

1 个答案:

答案 0 :(得分:0)

如果使用Visual c ++,则可以执行以下操作将变量放在共享内存部分中。

首先,在标头中将变量声明为从DLL导出的内容的常规变量:

MYDLL_API int MyDllVariable;

在源文件中定义变量时:

#pragma section("shared_data", read, write, shared)
#pragma data_seg("shared_data")
__declspec(dllexport) int MyDllVariable;