Sdílet prostřednictvím


Serializace typů

Kompilátor MIDL generuje až tři funkce pro každý typ, na který se použije atribut [kódování] nebo [ dekódování]. Například pro uživatelem definovaný typ s názvem MyTypekompilátor generuje kód pro MyType_Encode, MyType_Decode a MyType_AlignSize funkce. Pro tyto funkce kompilátor zapisuje prototypy do Stub.h a zdrojového kódu do Stub_c.c. Obecně platí, že objekt MyType můžete kódovat pomocí MyType_Encode a dekódovat objekt z vyrovnávací paměti pomocí MyType_Decode. MyType_AlignSize se používá, pokud potřebujete znát velikost vyrovnávací paměti pro zařazování před jeho přidělením.

Následující funkce kódování je generována kompilátorem MIDL. Tato funkce serializuje data objektu, na který odkazuje objekt pObject, a vyrovnávací paměť je získána podle metody zadané v popisovači. Po zápisu serializovaných dat do vyrovnávací paměti řídíte vyrovnávací paměť. Všimněte si, že popisovač dědí stav z předchozích volání a vyrovnávací paměti musí být zarovnané na 8.

Implicitní popisovač:

void MyType_Encode (MyType __RPC_FAR * pObject);

Explicitní popisovač:

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

Následující funkce deserializuje data z úložiště aplikace do objektu, na který odkazuje pObject. Zařazovanou vyrovnávací paměť zadáte podle metody zadané v popisovači. Všimněte si, že popisovač může dědit stav z předchozích volání a vyrovnávací paměti musí být zarovnaný na 8.

Implicitní popisovač:

void MyType_Decode (MyType __RPC_FAR * pObject);

Explicitní popisovač:

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

Následující funkce vrátí velikost vbajch To umožňuje serializovat sadu instancí stejných nebo různých typů do vyrovnávací paměti a zároveň zajistit, aby byla data pro každý objekt odpovídajícím způsobem zarovnaná. MyType_AlignSize předpokládá, že instance, na kterou odkazuje objekt pObject, bude zařazena do vyrovnávací paměti začínající posunem zarovnaným na 8.

Implicitní popisovač:

size_t MyType_AlignSize (MyType __RPC_FAR * pObject);

Explicitní popisovač:

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

Všimněte si, že jak vzdálené procedury s implicitními vazbami popisovačů, tak serializované typy s implicitními obslužnými rutinami používají stejnou globální proměnnou popisovače. Proto se doporučuje nemíchat serializaci typů a vzdálené procedury v rozhraní s implicitními popisovači. Podrobnosti najdete v tématu Implicitní a explicitní popisovače.