Microsoft RPC Binding-Handle-Erweiterungen

Die Microsoft-Erweiterungen für die IDL-Sprache unterstützen mehrere Handleparameter, die an anderen Positionen als dem ersten, ganz links liegenden Parameter angezeigt werden. Die folgenden Schritte beschreiben die Sequenz, die der MIDL-Compiler durchläuft, um den Bindungshandleparameter im DCE-Kompatibilitätsmodus (/osf) und im Standardmodus (Microsoft-extended) aufzulösen.

DCE-Kompatibilitätsmodus

Standardmodus

DCE-IDL-Compiler suchen als ersten Parameter nach einem expliziten Bindungshandle. Wenn der erste Parameter kein Bindungshandle ist und mindestens ein Kontexthandle angegeben wird, wird das ganz links gelassene Kontexthandle als Bindungshandle verwendet. Wenn der erste Parameter kein Handle ist und keine Kontexthandles vorhanden sind, verwendet die Prozedur die implizite Bindung mit dem impliziten Handle des ACF-Attributs oder [ _ ] dem [ automatischen _ Handle ] .

Die Microsoft-Erweiterungen für die IDL ermöglichen es dem Bindungshandle, sich an einer anderen Position als dem ersten Parameter zu befinden. Der ganz links links [ im ] expliziten Handleparameter , unabhängig davon, ob es sich um ein primitives, programmerdefiniertes oder Kontexthandle handelt, ist das Bindungshandle. Wenn keine Handleparameter vorhanden sind, verwendet die Prozedur die implizite Bindung mit dem impliziten Handle des ACF-Attributs oder [ _ ] dem [ automatischen _ Handle ] .

Die folgenden Regeln gelten sowohl für den DCE-Kompatibilitätsmodus (/osf) als auch für den Standardmodus:

  • Die Automatische Handlebindung wird verwendet, wenn kein ACF vorhanden ist.
  • Explizit [ in ] oder [ in werden out-Handles ] für eine einzelne Funktion jeder impliziten Bindung vorangebeutet, die für die Schnittstelle angegeben ist.
  • Mehrere [ ] primitive Out-Handles in oder [ in ] werden nicht unterstützt.
  • Mehrere [ ] [ explizite Kontexthandles in oder in ] sind zulässig.
  • Alle vom Programmierer definierten Handleparameter mit Ausnahme des Bindungshandleparameters werden als transklassierte Daten behandelt.

Die folgende Tabelle enthält Beispiele und beschreibt, wie Bindungshandles in jedem Compilermodus zugewiesen werden.

Beispiel BESCHREIBUNG
void proc1( void );
Es wird kein explizites Handle angegeben. Das implizite Bindungshandle, das durch [ implicit_handle] oder [ auto_handle] angegeben wird, wird verwendet. Wenn kein ACF vorhanden ist, wird ein automatisches Handle verwendet.
void proc2([in] handle_t H,           [in] short s );
Ein explizites Handle vom Typ handle_t wird angegeben. Der Parameter H ist das Bindungshandle für die Prozedur.
void proc3([in] short s,           [in] handle_t H );
Der erste Parameter ist kein Handle. Im Standardmodus ist der ganz linke Handleparameter Hdas Bindungshandle. Im Modus /osf wird die implizite Bindung verwendet. Es wird ein Fehler gemeldet, da der zweite Parameter voraussichtlich transstruiert ist und handle_t nicht übertragen werden können.
typedef [handle] short * MY_HDL;void proc1([in] short s,           [in] MY_HDL H );
Der erste Parameter ist kein Handle. Im Standardmodus ist der ganz linke Handleparameter Hdas Bindungshandle. Die Stubs rufen die vom Benutzer bereitgestellten Routinen MY_HDL_bind und MY_HDL_unbind auf. Im/osf-Modus wird die implizite Bindung verwendet. Der vom Programmierer definierte Handleparameter H wird als transklassierte Daten behandelt.
Typedef [handle] short * MY_HDL;void proc1([in] MY_HDL H,            [in] MY_HDL p );
Der erste Parameter ist ein Bindungshandle. Der Parameter H ist der Bindungshandleparameter. Der zweite vom Programmierer definierte Handleparameter wird als transklassierte Daten behandelt.
Typedef [context_handle] void * CTXT_HDL;void proc1([in] short s,           [in] long l,           [in] CTXT_HDL H ,           [in] char c);
Das Bindungshandle ist ein Kontexthandle. Der Parameter H ist das Bindungshandle.