2013-06-21 130 views
-1

是否有任何理由或約定不通過COM對象作爲內部函數的引用?在模塊內傳遞COM對象作爲引用

我知道COM API中不能使用引用,因爲這會破壞二進制兼容性。但是在模塊中呢?

回答

1

完全可以通過引用非COM函數來傳遞COM對象。儘管引用僅僅是對象的別名,但它們通常作爲引擎下的指針來實現。

1

問題很腥,對象和接口的區別在COM中很重要。使用COM服務器的客戶端代碼只能用於接口指針。 CoCreateInstance()在服務器上創建一個對象,並返回指向由coclass實現的接口之一的接口指針。像IUnknown *一樣。你從來沒有處理過任何物體。 Boilerplate將接口指針作爲指針並通過引用傳遞它們並不是非常有用。您可以將它們包裝在智能指針類中,以便Release()調用是自動的。通過引用傳遞智能指針對象是好的,它與COM沒有任何關係。

它可能在COM服務器中有所不同。您通常使用實現COM接口的C++類實現對象。如果該服務器中的代碼需要對該對象的引用,那麼傳遞一個對C++對象的引用是有意義的。這只是C++中引用的標準用法,與COM沒有任何關係。