Delen via


Typeserialisatie

De MIDL-compiler genereert maximaal drie functies voor elk type waarvoor het kenmerk [ coderen] of [ het kenmerk] wordt toegepast. Voor een door de gebruiker gedefinieerd type met de naam MyTypegenereert de compiler bijvoorbeeld code voor de functies MyType_Encode, MyType_Decode en MyType_AlignSize. Voor deze functies schrijft de compiler prototypes naar Stub.h en broncode naar Stub_c.c. Over het algemeen kunt u een MyType--object coderen met MyType_Encode en een object uit de buffer decoderen met behulp van MyType_Decode. MyType_AlignSize wordt gebruikt als u de grootte van de marshalingbuffer moet weten voordat u deze toedeelt.

De volgende coderingsfunctie wordt gegenereerd door de MIDL-compiler. Deze functie serialiseert de gegevens voor het object waarnaar wordt verwezen door pObject en de buffer wordt verkregen volgens de methode die in de ingang is opgegeven. Nadat u de geserialiseerde gegevens naar de buffer hebt geschreven, bepaalt u de buffer. Houd er rekening mee dat de handle de status van de vorige aanroepen over neemt en dat de buffers moeten worden uitgelijnd op 8.

Voor een impliciete ingang:

void MyType_Encode (MyType __RPC_FAR * pObject);

Voor een expliciete ingang:

void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);

Met de volgende functie worden de gegevens uit de opslag van de toepassing gedeserialiseerd naar het object waarnaar pObject verwijst. U levert een marshaled buffer op basis van de methode die in de ingang is opgegeven. Houd er rekening mee dat de handle de status van de vorige aanroepen kan overnemen en dat de buffers moeten worden uitgelijnd op 8.

Voor een impliciete ingang:

void MyType_Decode (MyType __RPC_FAR * pObject);

Voor een expliciete ingang:

void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);

De volgende functie retourneert een grootte, in bytes, die het typeexemplaren bevat plus eventuele opvullingsbytes die nodig zijn om de gegevens uit te lijnen. Hiermee kunt u een set exemplaren van dezelfde of verschillende typen serialiseren in een buffer, terwijl u ervoor zorgt dat de gegevens voor elk object op de juiste wijze worden uitgelijnd. MyType_AlignSize gaat ervan uit dat het exemplaar waarnaar pObject wijst, in een buffer wordt geplaatst die begint bij de verschuiving die is uitgelijnd op 8.

Voor een impliciete ingang:

size_t MyType_AlignSize (MyType __RPC_FAR * pObject);

Voor een expliciete ingang:

size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);

Houd er rekening mee dat zowel externe procedures met impliciete bindingsgrepen als geserialiseerde typen met impliciete serialisatiegrepen dezelfde globale handlevariabele gebruiken. Daarom is het raadzaam om geen type serialisatie en externe procedures te combineren in een interface met impliciete ingangen. Zie Impliciete versus expliciete ingangenvoor meer informatie.