共用方式為


對於 user_marshal 和 wire_marshal 的封送處理規則

封送處理內嵌指標類型的 OSF-DCE 規格要求您在實作 <類型>_UserSize、<類型>_UserMarshal 和 <類型>_UserUnMarshal 函式時,注意下列限制。 (這裡提供的規則和範例是編組。不過,您的編組和解除編組例程必須遵循相同的限制):

  • 如果 wire-type 是沒有指標的平坦類型,則相應的 userm-type 的封送處理例程應該僅依據 wire-type 的配置封送處理數據。 例如:

    typedef [wire_marshal (long)] void * HANDLE_HANDLE;
    

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

  • 如果 wire-type 是指向另一種類型的指標,那麼你的 user-m 類型的封送處理例程應該根據 wire-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_marshal] 或 [user_marshal] 屬性定義的類型可以自由內嵌在其他類型中。

wire_marshal

user_marshal

「type_UserSize」函式

類型_UserMarshal 函式

Thetype_UserUnMarshalFunction

Thetype_UserFreeFunction