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

Sharing Global variable in a dll linked to two exe's

本文关键字:exe dll 全局变量 共享 两个 链接      更新时间:2023-10-16

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()实际上不会更新由exe1初始化的obj。我想将更新部分保留在testdll本身中,并且不想导出obj

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

是否可以从exe2更新obj

编辑:我知道Windows上不再支持使用data_seg,因此无法跨会话共享数据。

我的问题归结为在不同的dll实例(由exe加载(之间共享dll中的变量。像boost.interprocess这样的进程间通信是否只是可靠的方式,还是有类似的东西和不涉及boost的东西?

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

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

MYDLL_API int MyDllVariable;

在源文件中定义变量时:

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