封送處理user_marshal和wire_marshal規則

封送處理內嵌指標類型的 OSF-DCE 規格需要您在實 < 作類型_UserSize、 < type > _UserMarshal和 < type >> _UserUnMarshal 函式時觀察下列限制。 (此處提供的規則和範例適用于封送處理。不過,您的調整大小和取消封存常式必須遵循相同的限制) :

  • 如果 wire-type 是沒有指標的平面類型,則對應的 userm-type 封送處理常式應該只會根據線類型的配置封送處理資料。 例如:

    typedef [wire_marshal (long)] void * HANDLE_HANDLE;
    

    請注意, 線類型是平面類型。 每當傳遞HANDLE_HANDLE物件時,您的HANDLE_HANDLE_UserMarshal函式就會封送處理 long

  • 如果 wire-type 是另一種類型的指標,則對應 userm-type 的封送處理常式應該根據線類型所指向的類型配置封送處理資料。 NDR 引擎會負責指標。 例如:

    typedef struct HDATA
    {
        long size;
        [size_is(size)] long * pData;
    } HDATA;
    
    typedef HDATA * WIRE_TYPE;
    typedef [wire_marshal(WIRE_TYPE)] void * HANDLE_DATA;
    

    請注意,WIRE_TYPE線類型是指標類型。 您的HANDLE_DATA_UserMarshal函式會使用 HDATA 配置,而不是 HDATA * 版面配置,封送處理與控制碼相關的資料。

  • 線類型必須是一般資料類型或指標類型。 如果您的可轉譯類型必須是其他專案, (具有指標的結構,例如) ,請使用所需類型的指標做為 wire-type。

這些限制的效果是使用 [wire_marshal] 或 [user_marshal] 屬性定義的類型可以自由地內嵌在其他類型中。

wire_marshal

user_marshal

type_UserSize函式

type_UserMarshal函式

Thetype_UserUnMarshalFunction

Thetype_UserFreeFunction