OLE:多个OLE对象的共享IStorage?

时间:2016-11-10 14:20:49

标签: c++ com powerpoint ole

我目前正在实施一个IOleObject界面,将我们软件的可视化数据嵌入其他软件,如PowerPoint。我们的软件可以对测量数据(图表等)进行图形评估。

目标是,最终用户可以双击嵌入的OLE对象,在我们的软件中对其进行编辑。数据将使用IStorage中的给定IPersistStorage::Save/Load接口进行存储。必须嵌入测量数据,而不是链接。

我当前的解决方案工作正常,但问题是,每个OLE对象将保存一次嵌入数据。在示例中,我们有10 MB的测量数据,最终用户将50个不同的测量数据图嵌入到PowerPoint中,测量数据将在PowerPoint文件中嵌入50次(50 * 10 MB = 500 MB,尽管10 MB每个PowerPoint文件就够了。)

我的问题是整个容器(?)或类似的东西是否存在共享的IStorage接口?

IPersistStorage :: Load / Save中给定的IStorage接口仅取决于特定的嵌入式OLE对象。

如果我能告诉主机应用程序类似于" PowerPoint,我的五十个OLE对象在那里共享那个IStorage会很棒。请在PPTX文件中保存一次"。

1 个答案:

答案 0 :(得分:3)

不,这就是OLE嵌入应该起作用的方式。每个对象在容器中都有自己的存储空间。如果它是同一个具有相同数据的对象,为什么需要嵌入50次?如果它是相同的对象,并且您希望它位于演示文稿中的不同页面上,为什么不嵌入第一个实例并使所有剩余的实例链接?那会节省存储空间。当然,如果删除第一个嵌入式实例,则所有链接都将转为....