我目前正在实现IOleObject
界面,以将我们软件的可视化数据嵌入到其他软件(如PowerPoint)中。我们的软件创建测量数据(图表等)的图形评估。
目的是使最终用户可以双击嵌入式OLE对象以在我们的软件中对其进行编辑。数据将使用给定的IStorage
接口存储在IPersistStorage::Save/Load
中。测量的数据必须是嵌入式的,而不是链接的。
我当前的解决方案运行良好,但问题是,每个OLE对象将保存一次嵌入式数据。在示例中,我们有10 MB的测量数据,最终用户在PowerPoint中嵌入了该测量数据的五十张不同图表,该测量数据将在PowerPoint文件中嵌入五十次(50 * 10 MB = 500 MB,尽管10 MB每个PowerPoint文件就足够了)。
我的问题是整个容器是否有共享的IStorage接口(?)或类似的东西?
IPersistStorage :: Load / Save中给定的IStorage接口仅取决于特定的嵌入式OLE对象。
如果我能告诉主机应用程序诸如“ PowerPoint,我的五十个OLE对象共享该IStorage。请仅将其保存在PPTX文件中一次”,那就太好了。
最佳答案
不,这就是OLE嵌入应该起作用的方式。每个对象在容器中都有自己的存储空间。如果是具有相同数据的同一对象,为什么需要将其嵌入50次?如果它是同一个对象,并且希望它位于演示文稿的不同页面上,为什么不嵌入第一个实例并使所有其余实例链接?这样可以节省存储空间。当然,如果删除第一个嵌入式实例,则所有链接都将变为...。
关于c++ - OLE:多个OLE对象共享的IStorage?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40529840/