Serializacja typów
Kompilator MIDL generuje maksymalnie trzy funkcje dla każdego typu, do którego jest stosowany atrybut [kodowania] lub [ dekodowania] . Na przykład w przypadku typu zdefiniowanego przez użytkownika o nazwie MyTypekompilator generuje kod dla funkcji MyType_Encode, MyType_Decode i MyType_AlignSize. W przypadku tych funkcji kompilator zapisuje prototypy w pliku Stub.h i kodzie źródłowym w celu Stub_c.c. Ogólnie rzecz biorąc, można kodować obiekt MyType za pomocą MyType_Encode i dekodować obiekt z buforu przy użyciu MyType_Decode. MyType_AlignSize jest używana, jeśli musisz znać rozmiar buforu marshalingu przed jego przydziałem.
Następująca funkcja kodowania jest generowana przez kompilator MIDL. Ta funkcja serializuje dane obiektu wskazywane przez obiekt pObject, a bufor jest uzyskiwany zgodnie z metodą określoną w dojściu. Po zapisaniu serializowanych danych do buforu należy kontrolować bufor. Należy pamiętać, że uchwyt dziedziczy stan z poprzednich wywołań, a muszą być wyrównane do 8.
W przypadku niejawnego uchwytu:
void MyType_Encode (MyType __RPC_FAR * pObject);
W przypadku jawnego uchwytu:
void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);
Poniższa funkcja deserializuje dane z magazynu aplikacji do obiektu wskazywanego przez obiekt pObject. Należy podać marshalowany bufor zgodnie z metodą określoną w dojściu. Należy pamiętać, że dojście może dziedziczyć stan z poprzednich wywołań, a muszą być wyrównane do 8.
W przypadku niejawnego uchwytu:
void MyType_Decode (MyType __RPC_FAR * pObject);
W przypadku jawnego uchwytu:
void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);
Poniższa funkcja zwraca rozmiar w bajtach, który zawiera wystąpienie typu oraz wszystkie bajty wypełnienia potrzebne do wyrównania danych. Umożliwia to serializowanie zestawu wystąpień tego samego lub różnych typów w buforze przy jednoczesnym zapewnieniu, że dane dla każdego obiektu są odpowiednio wyrównane. MyType_AlignSize zakłada, że wystąpienie wskazywane przez obiekt pObject zostanie przełożone do buforu rozpoczynającego się od przesunięcia wyrównanego do wartości 8.
W przypadku niejawnego uchwytu:
size_t MyType_AlignSize (MyType __RPC_FAR * pObject);
W przypadku jawnego uchwytu:
size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);
Należy pamiętać, że obie procedury zdalne z niejawnymi uchwytami powiązań i serializacji typów z niejawnymi uchwytami serializacji używają tej samej zmiennej obsługi globalnej. Dlatego zaleca się, aby nie mieszać serializacji typów i procedur zdalnych w interfejsie z niejawnymi uchwytami. Aby uzyskać szczegółowe informacje, zobacz Niejawne i jawne dojścia.