attributo handle
L'attributo [handle] specifica un tipo di handle definito dall'utente o "personalizzato".
typedef [handle] typename;
handle_t __RPC_USER typename_bind (typename);
void __RPC_USER typename_unbind (typename, handle_t);
-
Typename
-
Specifica il nome del tipo di binding definito dall'utente.
Gli handle definiti dall'utente consentono agli sviluppatori di progettare handle significativi per l'applicazione. Un handle definito dall'utente può essere definito solo in una dichiarazione di tipo, non in un dichiaratore di funzioni.
Un parametro di un tipo definito dall'attributo [handle] viene usato per determinare l'associazione per la chiamata e viene trasmesso alla procedura chiamata.
L'utente deve fornire routine di associazione e di associazione per convertire tra tipi di handle primitivi e definiti dall'utente. Dato un handle definito dall'utente di tipo typename, l'utente deve fornire le routine typename_bind e typename_unbind. Ad esempio, se il tipo di handle definito dall'utente è denominato MYHANDLE, le routine sono denominate MYHANDLE_bind e MYHANDLE_unbind.
Se ha esito positivo, la routinetypename_bind deve restituire un handle di associazione primitiva valido. In caso di esito negativo, la routine deve restituire un valore NULL. Se la routine restituisce NULL, la routine typename_unbind non verrà chiamata. Se la routine di associazione restituisce un handle di associazione non valido diverso da NULL, il comportamento stub non è definito.
Quando la procedura remota ha un handle definito dall'utente come parametro o come handle implicito, gli stub client chiamano la routine di associazione prima di chiamare la procedura remota. Gli stub client chiamano la routine di associazione dopo la chiamata remota.
In DCE IDL un parametro con l'attributo [handle] deve essere visualizzato come primo parametro nell'elenco degli argomenti della routine remota. I parametri successivi, inclusi altri attributi [handle], vengono considerati come parametri ordinari. Microsoft supporta un'estensione per DCE IDL che consente al parametro [handle] definito dall'utente di essere visualizzato in posizioni diverse dal primo parametro.
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);