Microsoft RPC Binding-Handle-tillägg

Microsoft-tilläggen till IDL-språket stöder flera referensparametrar som visas i andra positioner än den första, längst till vänster, parametern. Följande steg beskriver sekvensen som MIDL-kompilatorn går igenom för att matcha bindningshandtagsparametern i DCE-kompatibilitetsläge (/osf), och i standardläge (Microsoft-extended).

DCE-kompatibilitetsläge

Standardläge

  • Explicit bindningshandtag till vänster.
  • Implicit bindningsreferens som anges av [implicit_handle] eller [auto_handle].
  • Om det inte finns någon ACF används som standard [auto_handle].

DCE IDL-kompilatorer letar efter en explicit bindningsreferens som den första parametern. När den första parametern inte är ett bindningshandtag och en eller flera kontextreferenser har angetts används kontexthandtaget längst till vänster som bindningshandtag. När den första parametern inte är ett handtag och det inte finns några kontextreferenser använder proceduren implicit bindning med hjälp av ACF-attributet [implicit_handle] eller [auto_handle].

Med Microsoft-tilläggen till IDL kan bindningshandtaget vara i en annan position än den första parametern. Den vänstra [i] explicit handtagsparameter – oavsett om det är ett primitivt, programmerarde eller kontexthandtag – är bindningshandtaget. När det inte finns några referensparametrar använder proceduren implicit bindning med hjälp av ACF-attributet [implicit_handle] eller [auto_handle].

Följande regler gäller för både DCE-kompatibilitetsläge (/osf) och standardläge:

  • Bindning för automatisk handtag används när det inte finns någon ACF.
  • Explicit [i] eller [i, ut] referenser för en enskild funktion före alla implicita bindningar som anges för gränssnittet.
  • Flera [i] eller [i, out] primitiva referenser stöds inte.
  • Flera [i] eller [i, out] explicita kontextreferenser tillåts.
  • Alla programmerdefinierade referensparametrar utom parametern binding-handle behandlas som överförbara data.

Följande tabell innehåller exempel och beskriver hur bindningshandtag tilldelas i varje kompilatorläge.

Exempel Beskrivning
void proc1( void );
Inget explicit handtag har angetts. Det implicita bindningshandtaget som anges av [ implicit_handle] eller [ auto_handle], används. När det inte finns någon ACF används ett automatiskt handtag.
void proc2([in] handle_t H,           [in] short s );
Ett explicit handtag av typen handle_t anges. Parametern H är bindningshandtaget för proceduren.
void proc3([in] short s,           [in] handle_t H );
Den första parametern är inte ett handtag. I standardläge är den vänstra referensparametern, H, bindningshandtaget. I /osf-läge används implicit bindning. Ett fel rapporteras eftersom den andra parametern förväntas vara överförbar och handle_t inte kan överföras.
typedef [handle] short * MY_HDL;void proc1([in] short s,           [in] MY_HDL H );
Den första parametern är inte ett handtag. I standardläge är den vänstra referensparametern, H, bindningshandtaget. Stubs anropar de användardefinierade rutinerna MY_HDL_bind och MY_HDL_unbind. I/osf-läge används implicit bindning. Den programmerdefinierade referensparametern H behandlas som överförbara data.
Typedef [handle] short * MY_HDL;void proc1([in] MY_HDL H,            [in] MY_HDL p );
Den första parametern är ett bindningshandtag. Parametern H är parametern binding-handle. Den andra programmerdefinierade referensparametern behandlas som överförbara data.
Typedef [context_handle] void * CTXT_HDL;void proc1([in] short s,           [in] long l,           [in] CTXT_HDL H ,           [in] char c);
Bindningshandtaget är en kontextreferens. Parametern H är bindningshandtaget.