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()
实际上不会更新由obj
初始化的exe1
。我想将更新部分保留在testdll
中,而又不想导出obj
。
注意:exe1
是一个Windows服务,它将继续运行,而exe2
是一个独立的应用程序,可以多次启动和关闭。
是否可以从obj
更新exe2
?
编辑:我知道Windows上不再支持使用data_seg
,因此不可能在会话之间共享数据。
我的问题归结为跨不同dll实例(由exe加载)的dll中的变量共享。像boost.interprocess这样的进程间通信是唯一可靠的方法,还是存在类似且不涉及boost
的事物?
答案 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;