RoGetAgileReference 函式 (combaseapi.h)

為指定介面所指定的物件建立敏捷式參考。

語法

HRESULT RoGetAgileReference(
  [in]  AgileReferenceOptions options,
  [in]  REFIID                riid,
  [in]  IUnknown              *pUnk,
  [out] IAgileReference       **ppAgileReference
);

參數

[in] options

註冊選項。

[in] riid

要取得敏捷式參考之物件的介面識別碼。

[in] pUnk

要封裝在敏捷式參考中的介面指標。 它必須是與 riid相同的類型。 它可能是進程內物件的指標,或是物件的 Proxy 指標。

[out] ppAgileReference

物件的敏捷式參考。 呼叫 Resolve 方法,將物件當地語系化為呼叫 Resolve 的 Apartment。

傳回值

此函式可以傳回下列其中一個值。

傳回值 描述
S_OK
語言函式已順利完成。
E_INVALIDARG
選項參數無效。
E_OUTOFMEMORY
因為記憶體不足的狀況,所以無法建構敏捷式參考。
E_NOINTERFACE
pUnk參數不支援riid參數所指定的介面識別碼。
CO_E_NOT_SUPPORTED
物件會實作 INoMarshal 介面。

備註

在現有物件上呼叫 RoGetAgileReference 函式,以要求物件的敏捷式參考。 物件不一定是敏捷的,但傳回的 IAgileReference 是敏捷式的。 敏捷式參考可以傳遞至相同進程中的另一個 Apartment,其中原始物件是使用 IAgileReference 介面擷取。

這在概念上類似于現有的全域介面資料表 (GIT) 。 取得 IAgileReference並用來直接擷取物件,而不是與 GIT 互動。 就像 GIT 是個別進程一樣,敏捷式參考是個別進程,而且無法封送處理。

敏捷式參考功能可改善 GIT 的效能。 敏捷式參考預設會執行積極式封送處理,以在建立敏捷式參考與敏捷式參考不同的 Apartment 中,從敏捷式參考擷取物件的情況下,儲存跨 Apartment 呼叫。 為了提升效能, RoGetAgileReference 函式的使用者可以使用相同的介面來建立 IAgileReference 並解析原始物件。 這會儲存額外的 QueryInterface 呼叫,以從解析的物件取得所需的介面。

例如,您有一個名為 CDemoExample 的非敏捷式物件,它會實作 IDemo 和 IExample 介面。 呼叫 RoGetAgileReference 函式,並使用IID_IDemo傳遞物件。 您會傳回 一個 IAgileReference 介面指標,這是敏捷式的,因此您可以將它傳遞至不同的 Apartment。 在其他 Apartment 中,使用 IID_IExample 呼叫 Resolve 方法。 您可以取回可在這個 Apartment 中使用的 IExample 指標。 這個 IExample 指標是連接到原始 CDemoExample 物件的 IExample Proxy。 敏捷式參考會處理作業的複雜度,例如手動封送處理至資料流程,並在 Apartment 界限的另一端取消封送處理。

規格需求

   
最低支援的用戶端 Windows 8.1 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2012 R2 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 combaseapi.h
程式庫 Ole32.lib
Dll Ole32.dll

另請參閱

AgileReferenceOptions

IAgileReference