共用方式為


Microsoft RPC Binding-Handle 擴充功能

IDL 語言的Microsoft延伸模組支援多個句柄參數,這些參數出現在第一個、最左邊、參數以外的位置。 下列步驟描述 MIDL 編譯程式在 DCE 相容性模式中解析系結句柄參數的順序(/osf),並以預設的 (Microsoft 擴充) 模式解析。

DCE 相容性模式

預設模式

DCE IDL 編譯程式會尋找明確系結句柄做為第一個參數。 當第一個參數不是系結句柄,而且指定了一或多個內容句柄時,最左邊的內容句柄會當做系結句柄使用。 當第一個參數不是句柄且沒有內容句柄時,程式會使用 ACF 屬性 [implicit_handle] 或 [auto_handle] 的隱含系結。

IDL 的Microsoft延伸模組可讓系結句柄位於第一個參數以外的位置。 最左邊的 [] 明確句柄參數,無論是基本型別、程式設計人員定義還是內容句柄,都是系結句柄。 沒有句柄參數時,程式會使用 ACF 屬性 [implicit_handle] 或 [auto_handle] 的隱含系結。

下列規則適用於 DCE 相容性 (/osf) 模式和預設模式:

  • 當沒有任何 ACF 存在時,就會使用自動句柄系結。
  • explicit [in] 或 [inout] 句柄,個別函式會先佔為 介面指定的任何隱含系結。
  • 不支援多個 [] 中的] 或 [in, out] 基本句柄。
  • 允許多個 [] 中的 [] 或 [中 , out] 明確內容句柄。
  • 系結句柄參數以外的所有程式設計人員定義句柄參數都會被視為可轉譯的數據。

下表包含範例,並說明如何在每個編譯程式模式中指派系結句柄。

描述
void proc1( void );
未指定明確的句柄。 使用 [implicit_handle] 或 [ auto_handle]所指定的隱含系結句柄。 當沒有任何 ACF 存在時,就會使用自動句柄。
void proc2([in] handle_t H,           [in] short s );
指定handle_t類型的明確句柄。 H 參數是程式的系結句柄。
void proc3([in] short s,           [in] handle_t H );
第一個參數不是句柄。 在預設模式中,最左邊的句柄參數 H是系結句柄。 在 /osf 模式中,會使用隱含系結。 報告錯誤是因為第二個參數預期為可傳輸,且無法傳輸handle_t。
typedef [handle] short * MY_HDL;void proc1([in] short s,           [in] MY_HDL H );
第一個參數不是句柄。 在預設模式中,最左邊的句柄參數 H是系結句柄。 存根會呼叫使用者提供的例程MY_HDL_bind和MY_HDL_unbind。 在/osf 模式中,會使用隱含系結。 程序設計人員定義句柄參數 H 被視為可轉譯的數據。
Typedef [handle] short * MY_HDL;void proc1([in] MY_HDL H,            [in] MY_HDL p );
第一個參數是系結句柄。 H 參數是係結句柄參數。 第二個程式設計人員定義句柄參數會被視為可轉譯的數據。
Typedef [context_handle] void * CTXT_HDL;void proc1([in] short s,           [in] long l,           [in] CTXT_HDL H ,           [in] char c);
系結句柄是內容句柄。 H 的參數是系結句柄。