handle 屬性
[handle] 屬性會指定使用者定義的或「自訂」句柄類型。
typedef [handle] typename;
handle_t __RPC_USER typename_bind (typename);
void __RPC_USER typename_unbind (typename, handle_t);
-
typename
-
指定使用者定義系結控制碼類型的名稱。
使用者定義的控制碼可讓開發人員設計對應用程式有意義的控制碼。 使用者定義控制碼只能在類型宣告中定義,而不能定義在函式宣告子中。
[handle] 屬性所定義之型別的參數可用來判斷呼叫的系結,並傳輸至呼叫的程式。
使用者必須提供系結和解除系結常式,才能在基本型別和使用者定義控制碼類型之間轉換。 假設使用者定義 typename類型的控制碼,使用者必須提供常式 typename_bind 和 typename_unbind。 例如,如果使用者定義控制碼類型命名為 MYHANDLE,則常式會命名為 MYHANDLE_bind 和 MYHANDLE_unbind。
如果成功, typename_bind 常式應該會傳回有效的基本系結控制碼。 如果失敗,常式應該會傳回 Null。 如果常式傳回 Null,將不會呼叫 typename_unbind 常式。 如果系結常式傳回不正確系結控制碼與 Null不同,則存根行為是未定義的。
當遠端程式具有使用者定義控制碼做為參數或隱含控制碼時,用戶端存根會在呼叫遠端程式之前呼叫系結常式。 用戶端存根會在遠端呼叫之後呼叫解除系結常式。
在 DCE IDL 中,具有 [handle] 屬性的參數必須顯示為遠端程式引數清單中的第一個參數。 後續參數,包括其他 [handle] 屬性,會被視為一般參數。 Microsoft 支援 DCE IDL 的延伸模組,可讓使用者定義 [handle] 參數出現在第一個參數以外的位置。
typedef [handle] struct
{
char machine[8];
char nmpipe[256];
} h_service;
handle_t __RPC_USER h_service_bind(h_service);
void __RPC_USER h_service_unbind(h_service, handle_t);