2014-09-30 83 views
3

我有一個操作TClientDataset對象的Delphi VCL應用程序。我需要將此對象作爲參數傳遞給也是用Delphi編寫的自定義COM庫。Delphi和COM:是否可以將TClientDataset作爲參數傳遞給COM庫?

我有兩個問題: 1)這可能嗎? 2)如果是這樣,怎麼樣?

+2

您可以傳遞它的['Data'](http://docwiki.embarcadero.com/Libraries/XE6/en/Datasnap.DBClient.TCustomClientDataSet.Data)。 – TLama 2014-09-30 14:11:01

回答

3

不,你不能傳遞這樣的對象。它不是有效的COM互操作類型。事實上,你甚至無法在運行時包之外的Delphi模塊之間傳遞這樣的對象。

最明顯的解決方案是:

  • 包住了COM接口對象和傳遞。該接口將不得不公開提取數據的方法。
  • 序列化數據,例如JSON,並將其作爲文本傳遞。另一方面,你需要反序列化。
  • 使用客戶端數據集的DataXMLData屬性所提供的內置序列化功能。

後兩個序列化的選項可能更簡單。但在內存方面成本更高。使用接口需要更多的代碼工作,但可能會導致更高效的運行時性能。

+0

現在我們將數據序列化爲JSON,但是這個過程消耗了大量的內存(這是一個多線程環境)。 – Rodrigo 2014-09-30 14:53:03

+0

COM接口封裝將避免JSON方法的內存成本 – 2014-09-30 14:54:38

相關問題