Win32 中的全局(进程范围)属性

问题描述 投票:0回答:3

我试图在一个具有极其复杂的依赖结构(大量 DLL)的项目中跨 DLL 共享一些数据。

我希望能够将密钥与应用程序一部分中的某些数据相关联,然后通过在应用程序的其他部分中提供适当的密钥来提取该数据。在某种程度上,可以说我正在寻找类似于 Java 的 System.setProperty()/getProperty() 的东西。

我确信 Process API 可以让我访问进程范围的缓冲区,但我没有运气。有什么想法吗?

(我知道干净的解决方案是引入一个新的 DLL 并将其正确链接到现有的 DLL。不幸的是,这种类型的解决方案超出了我团队的职责范围)。

c++ c winapi dll
3个回答
1
投票

您不需要花哨的 API。 Windows 有一个更老的 API 专门用于此类内容。这些东西被称为“原子”。您可以使用

AddAtom
FindAtom
等函数。默认情况下,原子是进程范围内的。


0
投票

需要明确的是,只有 one 进程中有多个 DLL 的 one exe,但有多个模块。所以你不是在寻找进程间通信。

在回答中我看到两种策略:

  1. 使用稍微受限的 Windows API 原子(基本上只有字符串数据),可以在进程内或进程之间工作。

  2. 如果您编写的 DLL 包含您推测的 SetProperty/getproperty 功能,则无需再次编译所有其他 DLL(这可能超出了您团队的规范) - 您只需要重新编译当前正在使用的那些 DLL您的新功能(set/getproperty)(大概在您团队的能力范围内)。所以这似乎是一个直接而强大的解决方案。


0
投票

使用

SetEnvironmentVariable()
GetEnvironmentVariable()
Win32 API。进程中的所有 DLL 都可以知道变量的名称。变量的值可以是字符串、序列化为字符串的 JSON,或者是所有 DLL 都知道其类型的对象的内存地址的字符串表示形式。

© www.soinside.com 2019 - 2024. All rights reserved.