隱式綁定控制代碼
隱含系結句柄可讓應用程式選取特定伺服器來執行其遠端過程調用。 如需詳細資訊,請參閱 Client-Side 系結。 它們也會讓您的用戶端/伺服器程式使用已驗證的系結。 也就是說,用戶端可以在隱含系結句柄中指定驗證資訊。 RPC 執行階段程式庫會使用驗證資訊,在用戶端與伺服器之間建立已驗證的 RPC 會談。 如需詳細資訊,請參閱 安全性。
注意
隱含繫結控制代碼不是執行緒安全的。 因此,多線程應用程式應該避免使用隱含系結句柄。
當您的應用程式使用隱含系結時,客戶端必須設定系結資訊,才能建立系結。 用戶端建立隱含系結之後,不需要將任何系結句柄傳遞至遠端程式。 RPC 連結庫會處理通訊會話的其餘機制。
用戶端會將隱含句柄的系結資訊儲存在全域變數中。 當 MIDL 編譯程式從 MIDL 檔案中的介面規格產生用戶端存根和頭檔時,它也會產生全域系結句柄變數的程式代碼。 您的用戶端程式會初始化句柄,然後在解除綁定之前不會再次引用它。
您可以在介面的 ACF 中指定 [implicit_handle] 屬性,以建立隱含句柄,如下所示:
/* ACF file (complete) */
[
implicit_handle(handle_t hHello)
]
interface hello
{
}
在上述範例中使用的 handle_t 類型是用於定義系結句柄的 MIDL 數據類型。
建立隱含控制代碼之後,應用程式必須使用它作為 RPC 執行時期函式庫函式的參數。 請勿使用隱含的控制碼作為遠端程序調用的參數。 下列程式代碼範例示範如何使用隱含系結句柄。
RPC_STATUS status;
status = RpcBindingFromStringBinding(
pszStringBinding,
&hHello);
status = MyRemoteProcedure();
status = RpcBindingFree(hHello);
...
在上述範例中,RPC 運行時間連結庫函式 RpcBindingFromStringBinding 和 RpcBindingFree 兩者都需要在其參數列表中傳遞隱含系結句柄。 不過,由於它不是 RPC 執行時期函式庫的函數,遠端程式 MyRemoteProcedure 沒有執行。