exe1
和exe2
静态链接到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;