在进程之间共享类实例的方法

时间:2009-02-24 13:41:51

标签: c++ dll process share

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

最初我调查#pragma data_seg时只是感到失望,因为我意识到它不适用于类或在堆上分配的任何东西。

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

4 个答案:

答案 0 :(得分:4)

您可以使用memory-mapped files在进程之间共享数据。如果你需要调用对象上的函数,你必须使用COM或类似的东西,或者你必须实现自己的RPC协议。

答案 1 :(得分:4)

查看Boost::interprocess。它需要一点时间习惯,但它的效果非常好。我在共享内存中创建了相对复杂的数据结构,在进程之间运行良好。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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