Megosztás a következőn keresztül:


Típus szerializálása

A MIDL-fordító legfeljebb három függvényt hoz létre minden olyan típushoz, amelyre a [ kódolási] vagy a [ dekódoló] attribútumot alkalmazza. A MyTypenevű felhasználó által definiált típus esetében például a fordító létrehozza a MyType_Encode, MyType_Decode és MyType_AlignSize függvények kódját. Ezekhez a függvényekhez a fordító prototípusokat ír a Stub.h-nak, a forráskódot pedig a Stub_c.c-be. Általában MyType objektumokat kódolhat MyType_Encode és dekódolhat egy objektumot a pufferből a MyType_Decode használatával. MyType_AlignSize akkor használatos, ha a felosztás előtt ismernie kell a tárolópuffer méretét.

A MIDL-fordító a következő kódolási függvényt hozza létre. Ez a függvény szerializálja a pObject által mutatott objektum adatait, és a puffer a leíróban megadott módszer szerint lesz lekérve. Miután a szerializált adatokat a pufferbe írta, ön szabályozza a puffert. Vegye figyelembe, hogy a leíró az előző hívásoktól örökli az állapotot, a puffereket pedig 8-nál kell igazítani.

Implicit leíró esetén:

void MyType_Encode (MyType __RPC_FAR * pObject);

Explicit leíró esetén:

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

Az alábbi függvény deszerializálja az adatokat az alkalmazás tárolójából a pObject által mutatott objektumba. A fogópontban megadott módszernek megfelelően egy rögzített puffert kell megadnia. Vegye figyelembe, hogy a leíró örökölheti az előző hívások állapotát, és a puffereket 8-nál kell igazítani.

Implicit leíró esetén:

void MyType_Decode (MyType __RPC_FAR * pObject);

Explicit leíró esetén:

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

Az alábbi függvény bájtokban megadott méretet ad vissza, amely tartalmazza a típuspéldányt, valamint az adatok igazításához szükséges összes párnázási bájtot. Ez lehetővé teszi az azonos vagy különböző típusú példányok egy pufferbe való szerializálását, miközben biztosítja az egyes objektumok adatainak megfelelő igazítását. MyType_AlignSize feltételezi, hogy a pObject által hivatkozott példányt a rendszer a 8-nál jobbra igazított eltolástól kezdődő pufferbe telepíti.

Implicit leíró esetén:

size_t MyType_AlignSize (MyType __RPC_FAR * pObject);

Explicit leíró esetén:

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

Vegye figyelembe, hogy az implicit kötési fogópontokkal rendelkező távoli eljárások és az implicit szerializálási fogópontokkal rendelkező szerializált típusok egyaránt ugyanazt a globális leíróváltozót használják. Ezért javasoljuk, hogy ne keverje a típus szerializálását és a távoli eljárásokat egy implicit fogantyúkkal rendelkező felületen. További információ: Implicit versus Explicit leírók.