Microsoft RPC Binding-Handle Extensions
Le estensioni Microsoft per il linguaggio IDL supportano più parametri handle visualizzati in posizioni diverse dal primo parametro più a sinistra. I passaggi seguenti descrivono la sequenza che il compilatore MIDL passa per risolvere il parametro di handle di associazione in modalità di compatibilità DCE (/osf) e in modalità predefinita (estesa da Microsoft).
Modalità di compatibilità DCE
- Handle di associazione visualizzato in prima posizione.
- Parametro più a sinistra [in, context_handle].
- Handle di associazione implicito specificato da [implicit_handle] o [auto_handle].
- Se non è presente alcun ACF, per impostazione predefinita viene utilizzato [auto_handle].
Modalità predefinita
- Handle di associazione esplicito più a sinistra.
- Handle di associazione implicito specificato da [implicit_handle] o [auto_handle].
- Se non è presente alcun ACF, per impostazione predefinita viene utilizzato [auto_handle].
I compilatori IDL DCE cercano un handle di associazione esplicito come primo parametro. Quando il primo parametro non è un handle di associazione e vengono specificati uno o più handle di contesto, l'handle di contesto più a sinistra viene usato come handle di associazione. Quando il primo parametro non è un handle e non sono presenti handle di contesto, la procedura usa l'associazione implicita usando l'attributo ACF [implicit_handle] o [auto_handle].
Le estensioni Microsoft per il linguaggio IDL consentono all'handle di associazione di trovarsi in una posizione diversa dal primo parametro. Il parametro di handle esplicito [in] più a sinistra, indipendentemente dal fatto che si tratti di un handle primitivo, definito dal programmatore o del contesto, è l'handle di associazione. Quando non sono presenti parametri handle, la procedura usa l'associazione implicita usando l'attributo ACF [implicit_handle] o [auto_handle].
Le regole seguenti si applicano sia alla modalità DCE-compatibility (/osf) che alla modalità predefinita:
- L'associazione di handle automatico viene utilizzata quando non è presente alcun ACF.
- Handle espliciti [in] o [in, out] per una singola funzione annullano qualsiasi associazione implicita specificata per l'interfaccia.
- Gli handle primitivi [in] o [in, out] non sono supportati.
- Sono consentiti più handle di contesto espliciti [in] o [in, out].
- Tutti i parametri handle definiti dal programmatore, ad eccezione del parametro binding-handle, vengono considerati come dati trasmissibili.
La tabella seguente contiene esempi e descrive il modo in cui gli handle di associazione vengono assegnati in ogni modalità del compilatore.
Esempio | Descrizione |
---|---|
|
Non viene specificato alcun handle esplicito. Viene usato l'handle di associazione implicito specificato da [ implicit_handle] o [ auto_handle]. Quando non è presente alcun ACF, viene usato un handle automatico. |
|
Viene specificato un handle esplicito di tipo handle_t. Il parametro H è l'handle di associazione per la procedura. |
|
Il primo parametro non è un handle. In modalità predefinita, il parametro handle più a sinistra, H, è l'handle di associazione. In modalità /osf viene usata l'associazione implicita. Viene segnalato un errore perché si prevede che il secondo parametro sia trasmissibile e handle_t non può essere trasmesso. |
|
Il primo parametro non è un handle. In modalità predefinita, il parametro handle più a sinistra, H, è l'handle di associazione. Gli stub chiamano le routine fornite dall'utente MY_HDL_bind e MY_HDL_unbind. In/osf mode viene usata l'associazione implicita. Il parametro handle definito dal programmatore H viene considerato come dati trasmissibili. |
|
Il primo parametro è un handle di associazione. Il parametro H è il parametro binding-handle. Il secondo parametro handle definito dal programmatore viene considerato come dati trasmissibili. |
|
L'handle di associazione è un handle di contesto. Il parametro H è l'handle di associazione. |