Aracılığıyla paylaş


Tür Serileştirme

MIDL derleyicisi, [ kodlama] veya [ kod çözme] özniteliğinin uygulandığı her tür için en fazla üç işlev oluşturur. Örneğin, MyTypeadlı kullanıcı tanımlı bir tür için derleyici MyType_Encode, MyType_Decode ve MyType_AlignSize işlevleri için kod oluşturur. Bu işlevler için derleyici Stub.h'ye prototipler ve Stub_c.c'ye kaynak kodu yazar. Genel olarak, MyType_Encode ile MyType nesnesini kodlayabilir ve MyType_Decode kullanarak arabellekten bir nesnenin kodunu çözebilirsiniz. MyType_AlignSize ayırmadan önce hazırlama arabelleğinin boyutunu bilmeniz gerekiyorsa kullanılır.

Aşağıdaki kodlama işlevi MIDL derleyicisi tarafından oluşturulur. Bu işlev, pObject tarafından işaret edilen nesnenin verilerini serileştirir ve arabellek tanıtıcıda belirtilen yönteme göre elde edilir. Serileştirilmiş verileri arabelleğe yazdıktan sonra arabelleği denetleyebilirsiniz. Tanıtıcının durumu önceki çağrılardan devraldığını ve arabelleklerin 8'de hizalanması gerektiğini unutmayın.

Örtük tanıtıcı için:

void MyType_Encode (MyType __RPC_FAR * pObject);

Açık tanıtıcı için:

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

Aşağıdaki işlev, uygulamanın depolama alanından pObject tarafından işaret edilen nesneye verileri seri durumdan kaldırır. Tanıtıcıda belirtilen yönteme göre sıralanmış bir arabellek sağlarsınız. Tanıtıcının durumu önceki çağrılardan devralabileceğini ve arabelleklerin 8'de hizalanması gerektiğini unutmayın.

Örtük tanıtıcı için:

void MyType_Decode (MyType __RPC_FAR * pObject);

Açık tanıtıcı için:

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

Aşağıdaki işlev, tür örneğini ve verileri hizalamak için gereken doldurma baytlarını içeren bayt cinsinden bir boyut döndürür. Bu, aynı veya farklı türlerdeki bir dizi örneğin arabelleğe seri hale getirilmesini sağlarken, her nesnenin verilerinin uygun şekilde hizalandığından emin olur. MyType_AlignSize pObject tarafından işaret edilen örneğin 8'de hizalanan uzaklıkta başlayan bir arabelleğe sıralandığını varsayar.

Örtük tanıtıcı için:

size_t MyType_AlignSize (MyType __RPC_FAR * pObject);

Açık tanıtıcı için:

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

Hem örtük bağlama tanıtıcılarına sahip uzak yordamların hem de örtük serileştirme tanıtıcılarına sahip serileştirilmiş türlerin aynı genel tanıtıcı değişkenini kullandığını unutmayın. Bu nedenle, örtük tanıtıcılara sahip bir arabirimde tür serileştirme ve uzak yordamların karıştırılmaması önerilir. Ayrıntılar için bkz. Örtük ve Açık Tanıtıcılar.