在链接到两个 exe 的 dll 中共享全局变量
Sharing Global variable in a dll linked to two exe's
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;
相关文章:
- 在 ******.exe 中0x00000000772CA267 (ntdll.dll) 处未处理的异常:0xC0000
- 解析引用 |exe/dll vs lib
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- C++ DLL 引用C++.exe中的函数和类
- 从 exe 和 dll 访问静态库中的 extern 变量
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- 在 EXE/DLL 之间传递数据
- 为什么我可以在EXE上编译DLL
- .EXE是否可以使用间接导入的 DLL 中的符号?
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- GetModuleHandle() 无法检索由 "notepad.exe" 加载的"advapi32.dll"的句柄
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- x64 位的 C++/CLI DLL 和 Exe 的应用崩溃
- 如何在 windowsservercore Docker 映像上安装执行本机C++ DLL/EXE 所需的所有依赖二进制
- 用户DLL/EXE中的堆分配失败
- 我可以将使用v120_xp工具集构建的静态库链接到使用VS2013中的v120工具集创建的EXE/DLL中吗
- 用于检查配置类型(exe/dll)的宏
- C++ 一个解决方案两个项目(EXE & DLL)链接错误