Typ serialisierung
Der MIDL-Compiler generiert bis zu drei Funktionen für jeden Typ, auf den das Attribut [ codiert] oder [ decodierung] -Attribut angewendet wird. For example, for a user-defined type named MyType, the compiler generates code for the MyType_Encode, MyType_Decode, and MyType_AlignSize functions. Für diese Funktionen schreibt der Compiler Prototypen in Stub.h und Quellcode in Stub_c.c. Im Allgemeinen können Sie ein MyType--Objekt mit MyType_Encode codieren und ein Objekt mithilfe von MyType_Decode aus dem Puffer decodieren. MyType_AlignSize wird verwendet, wenn Sie die Größe des Marshallingpuffers kennen müssen, bevor Sie ihn zuweisen.
Die folgende Codierungsfunktion wird vom MIDL-Compiler generiert. Diese Funktion serialisiert die Daten für das Objekt, auf das von pObject verwiesen wird, und der Puffer wird entsprechend der im Handle angegebenen Methode abgerufen. Nachdem Sie die serialisierten Daten in den Puffer geschrieben haben, steuern Sie den Puffer. Beachten Sie, dass das Handle den Status von den vorherigen Aufrufen erbt, und die Puffer müssen an 8 ausgerichtet werden.
Für ein implizites Handle:
void MyType_Encode (MyType __RPC_FAR * pObject);
Für ein explizites Handle:
void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);
Die folgende Funktion deserialisiert die Daten aus dem Speicher der Anwendung in das Objekt, auf das von pObject verwiesen wird. Sie geben einen gemarsteten Puffer gemäß der im Handle angegebenen Methode an. Beachten Sie, dass das Handle den Status von den vorherigen Aufrufen erben kann und die Puffer an 8 ausgerichtet werden müssen.
Für ein implizites Handle:
void MyType_Decode (MyType __RPC_FAR * pObject);
Für ein explizites Handle:
void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);
Die folgende Funktion gibt eine Größe in Bytes zurück, die die Typinstanz sowie alle Zum Ausrichten der Daten benötigten Abstandsbytes enthält. Dadurch wird die Serialisierung einer Reihe von Instanzen derselben oder verschiedener Typen in einen Puffer ermöglicht, während sichergestellt wird, dass die Daten für jedes Objekt entsprechend ausgerichtet sind. MyType_AlignSize geht davon aus, dass die Instanz, auf die von pObject verwiesen wird, in einen Puffer gemarstet wird, der am Offset bei 8 ausgerichtet ist.
Für ein implizites Handle:
size_t MyType_AlignSize (MyType __RPC_FAR * pObject);
Für ein explizites Handle:
size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);
Beachten Sie, dass sowohl Remoteprozeduren mit impliziten Bindungshandles als auch serialisierte Typen mit impliziten Serialisierungshandles dieselbe globale Handlevariable verwenden. Daher ist es ratsam, Typen serialisierung und Remoteprozeduren nicht in einer Schnittstelle mit impliziten Handles zu mischen. Ausführliche Informationen finden Sie unter impliziten im Vergleich zu expliziten Handles.