codificare l'attributo
L'attributo ACF [encode] specifica che una routine o un tipo di dati necessita del supporto per la serializzazione.
[
encode
[ , interface-attribute-list]
]
interface interface-name
{
interface-definition
}
[ encode [ , op-attribute-list] ] proc-name
typedef [encode [ , type-attribute-list] ] type-name
-
interface-attribute-list
-
Specifica altri attributi che si applicano all'interfaccia nel suo complesso.
-
interface-name
-
Specifica il nome dell'interfaccia.
-
definizione dell'interfaccia
-
Specifica le istruzioni IDL che formano la definizione dell'interfaccia.
-
op-attribute-list
-
Specifica altri attributi operativi applicabili alla routine, ad esempio [decode].
-
proc-name
-
Specifica il nome della routine.
-
type-attribute-list
-
Specifica altri attributi applicabili al tipo, ad esempio [decode] e [allocate].
-
type-name
-
Specifica un tipo definito nel file IDL.
L'attributo [encode] fa sì che il compilatore MIDL generi codice che un'applicazione può usare per serializzare i dati in un buffer. L'attributo [decode] genera il codice per annullare ilmarshaing dei dati da un buffer.
Usare gli attributi [encode] e [decode] in un ACF per generare codice di serializzazione per le procedure o i tipi definiti nel file IDL di un'interfaccia. Se usato come attributo di interfaccia, [encode] si applica a tutti i tipi e le procedure definiti nel file IDL. Se usato come attributo operativo, [encode] si applica solo alla procedura specificata. Se usato come attributo di tipo, [encode] si applica solo al tipo specificato.
Quando l'attributo [encode] o [decode] viene applicato a una routine, il compilatore MIDL genera uno stub di serializzazione in modo simile a quello degli stub remoti generati per le routine remote. Una routine può essere una procedura remota o di serializzazione, ma non può essere entrambe. Il prototipo della routine generata viene inviato allo STUB. File H mentre lo stub stesso viene inserito nel file STUB_C.C.
Il compilatore MIDL genera due funzioni per ogni tipo a cui si applica l'attributo [encode] e una funzione aggiuntiva per ogni tipo a cui si applica l'attributo [decode]. Ad esempio, per un tipo definito dall'utente denominato MyType, il compilatore genera codice per le funzioni MyType_Encode, MyType_Decode e MyType_AlignSize. Per queste funzioni, il compilatore scrive prototipi in STUB. Codice H e sorgente per STUB_C.C.
Per altre informazioni sugli handle di serializzazione e sulla codifica o sulla decodifica dei dati, vedere Servizi di serializzazione.
/*
ACF file example;
Assumes MyType1, MyType2, MyType3, MyProc1, MyProc2, MyProc3 defined
in IDL file
MyType1, MyType2, MyProc1, MyProc2 have encode and decode
serialization support
MyType3 and MyProc3 have encode serialization support only
*/
[
encode,
implicit_handle(handle_t bh)
]
interface regress
{
typedef [ decode ] MyType1;
typedef [ encode, decode ] MyType2;
[ decode ] MyProcc1();
[ encode ] MyProc2();
}