我有一個操作TClientDataset對象的Delphi VCL應用程序。我需要將此對象作爲參數傳遞給也是用Delphi編寫的自定義COM庫。Delphi和COM:是否可以將TClientDataset作爲參數傳遞給COM庫?
我有兩個問題: 1)這可能嗎? 2)如果是這樣,怎麼樣?
我有一個操作TClientDataset對象的Delphi VCL應用程序。我需要將此對象作爲參數傳遞給也是用Delphi編寫的自定義COM庫。Delphi和COM:是否可以將TClientDataset作爲參數傳遞給COM庫?
我有兩個問題: 1)這可能嗎? 2)如果是這樣,怎麼樣?
不,你不能傳遞這樣的對象。它不是有效的COM互操作類型。事實上,你甚至無法在運行時包之外的Delphi模塊之間傳遞這樣的對象。
最明顯的解決方案是:
Data
和XMLData
屬性所提供的內置序列化功能。後兩個序列化的選項可能更簡單。但在內存方面成本更高。使用接口需要更多的代碼工作,但可能會導致更高效的運行時性能。
現在我們將數據序列化爲JSON,但是這個過程消耗了大量的內存(這是一個多線程環境)。 – Rodrigo 2014-09-30 14:53:03
COM接口封裝將避免JSON方法的內存成本 – 2014-09-30 14:54:38
您可以傳遞它的['Data'](http://docwiki.embarcadero.com/Libraries/XE6/en/Datasnap.DBClient.TCustomClientDataSet.Data)。 – TLama 2014-09-30 14:11:01