2009-12-09 78 views
1

如果我收到另一個房間中的接口指針,而不是當前接口指針,我需要在發送的公寓一側對它進行編組,並在接收方對其進行解除編組。在接口指針因此收到我可以做一個QueryInterface?如果我做了QueryInterface,那麼接收到的指針是一個可用的接口指針還是需要再次編組?需要再次解組通過QueryInterface接收的接口指針?

感謝 ˚F

回答

1

是的,你可以調用接口上的任何方法,包括QueryInterface()。代理的行爲方式與實際對象完全相同 - 它只會將所有方法調用轉發給實際對象。無論何時,您在代理上調用的任何方法都會返回一個指針,該指針已被編組(如果無法編組),則會收到錯誤代碼),然後在您的身邊解組,可能會導致創建另一個代理。因此,當您撥打QueryInterface()時,您會收到一個已經解組的指向代理的指針。

+0

非常感謝您的回覆。 – coolcake 2009-12-09 08:02:01

+0

你說的是代理對象將被創建,假設我們編組的接口是一個佔用大量內存和資源的COM對象,這個代理是否被創建會導致再次佔用同一組資源和內存? – coolcake 2009-12-11 11:48:36

+0

不,代理是一個輕量級對象 - 它不會複製真實對象,它只會將調用轉發給實際對象。例如,你可能在真實對象中有一個文件句柄 - 但代理不知道這一點,它只知道真實對象的接口以及如何轉發呼叫。 – sharptooth 2009-12-11 12:30:27

2

你可以做一個QueryInterface,它將返回已封送的接口指針(因爲你調用QueryInterface不是一個真正的對象,但在代理對象)。

+0

非常感謝Sergius的回覆。 – coolcake 2009-12-09 08:02:31