OLE:多个 OLE 对象的共享 IStorage?
OLE: Shared IStorage for multiple OLE objects?
我目前正在实现一个 IOleObject
接口,以将我们软件的可视化数据嵌入到其他软件(如 PowerPoint)中。我们的软件创建测量数据的图形评估(图表等)。
目标是,最终用户可以双击嵌入的 OLE 对象以在我们的软件中对其进行编辑。数据将使用 IPersistStorage::Save/Load
中给定的 IStorage
接口存储。测量数据必须嵌入,不能链接。
我目前的解决方案工作正常,但问题是,每个 OLE 对象将保存一次嵌入数据。在示例中,我们有 10 MB 的测量数据,最终用户将 50 个不同的测量数据图表嵌入到 PowerPoint 中,测量数据将在 PowerPoint 文件中嵌入 50 次(50 * 10 MB = 500 MB,虽然 10 MB每个 PowerPoint 文件就足够了)。
我的问题是整个容器是否存在任何共享的 IStorage 接口(?)或类似的接口?
IPersistStorage::Load/Save 中给定的 IStorage 接口仅取决于特定的嵌入式 OLE 对象。
如果我能告诉主机应用程序类似 "PowerPoint, my fifty OLE objects share that IStorage there. Please save it only once in the PPTX file" 的东西就好了。
不,这就是 OLE 嵌入的工作方式。每个对象在容器中都有自己的存储空间。如果是同一个对象,同样的数据,为什么要嵌入50次呢?如果它是同一个对象,而您希望它位于演示文稿的不同页面上,为什么不嵌入第一个实例并为所有其余实例创建链接呢?这样可以节省存储空间。当然,如果删除第一个嵌入实例,所有链接将变为....
我目前正在实现一个 IOleObject
接口,以将我们软件的可视化数据嵌入到其他软件(如 PowerPoint)中。我们的软件创建测量数据的图形评估(图表等)。
目标是,最终用户可以双击嵌入的 OLE 对象以在我们的软件中对其进行编辑。数据将使用 IPersistStorage::Save/Load
中给定的 IStorage
接口存储。测量数据必须嵌入,不能链接。
我目前的解决方案工作正常,但问题是,每个 OLE 对象将保存一次嵌入数据。在示例中,我们有 10 MB 的测量数据,最终用户将 50 个不同的测量数据图表嵌入到 PowerPoint 中,测量数据将在 PowerPoint 文件中嵌入 50 次(50 * 10 MB = 500 MB,虽然 10 MB每个 PowerPoint 文件就足够了)。
我的问题是整个容器是否存在任何共享的 IStorage 接口(?)或类似的接口?
IPersistStorage::Load/Save 中给定的 IStorage 接口仅取决于特定的嵌入式 OLE 对象。
如果我能告诉主机应用程序类似 "PowerPoint, my fifty OLE objects share that IStorage there. Please save it only once in the PPTX file" 的东西就好了。
不,这就是 OLE 嵌入的工作方式。每个对象在容器中都有自己的存储空间。如果是同一个对象,同样的数据,为什么要嵌入50次呢?如果它是同一个对象,而您希望它位于演示文稿的不同页面上,为什么不嵌入第一个实例并为所有其余实例创建链接呢?这样可以节省存储空间。当然,如果删除第一个嵌入实例,所有链接将变为....