我目前正在實施一個IOleObject
界面,將我們軟件的可視化數據嵌入到其他軟件,如PowerPoint中。我們的軟件創建測量數據的圖形評估(圖表等)。OLE:爲多個OLE對象共享IStorage?
目標是,最終用戶可以雙擊嵌入的OLE對象以在我們的軟件中對其進行編輯。數據將使用IPersistStorage::Save/Load
中給定的IStorage
接口進行存儲。測量數據必須嵌入,而不是鏈接。
我目前的解決方案工作正常,但問題是,嵌入數據將被保存一次每個OLE對象。例如,我們獲得了10 MB的測量數據,最終用戶將五十個不同的測量數據圖嵌入到PowerPoint中,測量數據將在PowerPoint文件中嵌入五十次(50 * 10 MB = 500 MB,儘管10 MB每個PowerPoint文件就足夠了)。
我的問題是如果存在任何共享IStorage接口的整個容器(?)或類似的東西?
IPersistStorage :: Load/Save中給定的IStorage接口僅取決於特定的嵌入式OLE對象。
如果我可以告訴主機應用程序像「PowerPoint,我的50個OLE對象在那裏共享IStorage,請在PPTX文件中只保存一次」。
你能分享一些關於如何實現它(工程)的例子或文檔嗎?我對PowerPoint有錯誤,因爲它不會調用我的'IPersistStorage :: Save/Load'方法。 – JHG
我不確定PowerPoint調用您的方法時確切需要什麼。 我的界面聽下面的IID: - 的IOleObject = IID_IUnknown,IID_IOleObject - IDataObject的= IID_IDataObject - IPersistStorage = IID_IPersist,IID_IPersistStorage - IDispatch接口= IID_IDispatch 也許你沒有正確處理Close方法(你必須調用ClientSite - > SaveObject()如果標誌指定保存)。並且您必須處理對象中的AdviseSinks列表並通知這些接收器有關特定事件(即OnClose)。 也許您錯過了其中一項操作。 –
的確,我錯過了其中的一些行動。謝謝! – JHG