2

我编写了一个 C++ 类,我需要在至少两个 Windows 进程之间共享一个实例。有哪些不同的方法可以做到这一点?

最初,我查看了#pragma data_seg,但当我意识到它不适用于类或任何在堆上分配的东西时,我才感到失望。

类的实例必须可以通过 dll 访问,因为现有的完整应用程序已经使用此 dll。

4

4 回答 4

4

您可以潜在地使用内存映射文件在进程之间共享数据。如果您需要在对象上调用函数,则必须使用 COM 或类似的东西,或者您必须实现自己的 RPC 协议。

于 2009-02-24T13:46:28.617 回答
4

查看Boost::interprocess。这需要一点时间来适应,但效果很好。我在共享内存中制作了相对复杂的数据结构,这些数据结构在进程之间运行良好。

编辑:它也适用于内存映射文件。关键是您可以以结构化的方式使用数据;您不必将内存块(在文件或共享内存中)视为您必须仔细读/写才能保持有效状态的原始数据。Boost::interprocess 负责该部分,您可以使用 STL 容器,如树、列表等。

于 2009-02-24T14:29:00.077 回答
1

您可以使用placement new 在共享内存区域中创建对象。只要对象不使用任何指针,就可以了。

于 2009-02-24T14:56:43.130 回答
0

它是 POD 还是您需要能够跨进程共享单个实例?您是否考虑过使用单例模式(出于线程安全原因的静态初始化版本)?您还需要使用互斥锁来保护并发写入和东西。

在 Windows 上,您也可以使用 COM。

于 2009-02-24T13:47:48.333 回答