封送處理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] 屬性定義的類型可以自由地內嵌在其他類型中。
相關主題