handle-Attribut
Das [handle]-Attribut gibt einen benutzerdefinierten oder "angepassten" Handletyp an.
typedef [handle] typename;
handle_t __RPC_USER typename_bind (typename);
void __RPC_USER typename_unbind (typename, handle_t);
Parameter
-
Typename
-
Gibt den Namen des benutzerdefinierten Bindungshandlestyps an.
Bemerkungen
Benutzerdefinierte Handles ermöglichen Entwicklern das Entwerfen von Handles, die für die Anwendung von Bedeutung sind. Ein benutzerdefiniertes Handle kann nur in einer Typdeklaration und nicht in einem Funktionsdeklarator definiert werden.
Ein Parameter eines Typs, der durch das [handle]-Attribut definiert wird, wird verwendet, um die Bindung für den Aufruf zu bestimmen und an die aufgerufene Prozedur zu übertragen.
Der Benutzer muss Bindungs- und Bindungsroutinen bereitstellen, um zwischen primitiven und benutzerdefinierten Handletypen zu konvertieren. Bei einem benutzerdefinierten Handle vom Typ Typename muss der Benutzer die Routinen typename_bind und typename_unbind angeben. Wenn der benutzerdefinierte Handletyp beispielsweise MYHANDLE heißt, werden die Routinen MYHANDLE_bindung und MYHANDLE_unbind benannt.
Bei erfolgreicher Ausführung sollte die typename_bind-Routine ein gültiges primitives Bindungshandle zurückgeben. Wenn der Fehler nicht erfolgreich ist, sollte die Routine null zurückgeben. Wenn die Routine NULL zurückgibt, wird die typename_unbind-Routine nicht aufgerufen. Wenn die Bindungsroutine ein ungültiges Bindungshandle zurückgibt, das sich von NULL unterscheidet, ist das Stubverhalten nicht definiert.
Wenn die Remoteprozedur über ein benutzerdefiniertes Handle als Parameter oder als implizites Handle verfügt, rufen die Clientstubs die Bindungsroutine auf, bevor die Remoteprozedur aufgerufen wird. Die Client-Stubs rufen die Routine zum Aufheben der Bindung nach dem Remoteanruf auf.
In DCE IDL muss ein Parameter mit dem [handle]-Attribut als erster Parameter in der Argumentliste der Remoteprozedur angezeigt werden. Nachfolgende Parameter, einschließlich anderer [handle]-Attribute, werden als gewöhnliche Parameter behandelt. Microsoft unterstützt eine Erweiterung für DCE IDL, mit der der benutzerdefinierte [handle]-Parameter an anderen Positionen als dem ersten Parameter angezeigt werden kann.
Beispiele
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);
Weitere Informationen