Win32 中的全局(进程范围)属性
Posted
技术标签:
【中文标题】Win32 中的全局(进程范围)属性【英文标题】:Global (process wide) properties in Win32 【发布时间】:2009-09-22 12:28:07 【问题描述】:我正在尝试在具有极其复杂的依赖结构(大量 DLL)的项目中跨 DLL 共享一些数据。
我希望能够将密钥与应用程序的某个部分中的某些数据相关联,然后通过在应用程序的其他部分中提供适当的密钥来提取该数据。在某种程度上,可以说我在寻找类似于 Java 的 System.setProperty()/getProperty() 的东西。
我确信 Process API 可以让我访问进程范围的缓冲区,但我没有运气。有什么想法吗?
(我知道干净的解决方案是引入一个新的 DLL 并将其正确链接到现有的 DLL。不幸的是,这种类型的解决方案超出了我团队的任务范围)。
【问题讨论】:
【参考方案1】:您不需要花哨的 API。 Windows 有一个更老的 API 专门用于这类东西。这些东西被称为“原子”。您将使用AddAtom
和FindAtom
等函数。默认情况下,原子是进程范围的。
【讨论】:
这是一篇文章的链接,该文章有一个用于使用原子的包装类。 codeproject.com/KB/winsdk/win32Atom_Wrapper.aspx【参考方案2】:需要明确的是,one exe 具有多个 DLL,仅在 one 进程中但有多个模块。所以你不是在寻找进程间通信。
在回答中我看到了两种策略:
使用可在进程内或进程之间工作的稍微受限的 Windows API 原子(基本上只有字符串数据)。
如果您编写的 DLL 包含您推测的 SetProperty/getproperty 功能,您不必再次编译所有其他 DLL(这可能超出了您团队的规范) - 您只需重新编译那些 DLL当前正在使用您的新功能(set/getproperty)(大概在您的团队能力范围内)。所以这似乎是一个直接而强大的解决方案。
【讨论】:
以上是关于Win32 中的全局(进程范围)属性的主要内容,如果未能解决你的问题,请参考以下文章