實作 ICustomMarshaler 介面
更新:2007 年 11 月
若要使用自訂封送處理器,您必須將 MarshalAsAttribute 屬性套用至要封送處理的參數或欄位。這個屬性會識別啟動適當包裝函式的自訂封送處理器。
自訂封送處理器會實作 ICustomMarshaler 介面來提供適當的包裝函式給執行階段,在第一次有引數需要封送處理時建立自訂封送處理器。它會呼叫自訂封送處理器的 MarshalNativeToManaged 和 MarshalManagedToNative 方法,啟動正確的包裝函式來處理呼叫。以下表格說明由 ICustomMarshaler 介面公開的每一個方法。
介面方法 |
說明 |
---|---|
MarshalNativeToManaged |
傳回自訂執行階段可呼叫包裝函式,它可以封送處理做為引數傳遞的 Unmanaged 介面。封送處理器應該傳回該型別之自訂執行階段可呼叫包裝函式的執行個體。 |
MarshalManagedToNative |
傳回自訂 COM 可呼叫包裝函式,它可以封送處理做為引數傳遞的 Managed 介面。封送處理器應該傳回該型別之自訂 COM 可呼叫包裝函式的執行個體。 |
CleanUpNativeData |
為自訂封送處理器提供機會,以便針對 MarshalManagedToNative 方法所傳回的包裝函式,執行任何必要的清除工作。 |
CleanUpManagedData |
為自訂封送處理器提供機會,以便針對 MarshalNativeToManaged 方法所傳回的包裝函式,執行任何必要的清除工作。 |
GetInstance |
擷取自訂封送處理器的執行個體。如果自訂封送處理器沒有狀態 (Stateless) 的話,這個靜態方法可以每次建立一個自訂封送處理器的新執行個體,也可以永遠使用同一個。每當有參數或欄位被標記為 UnmanagedType.CustomMarshaler 時,這個方法就會被封送處理服務呼叫,用來建立封送處理器。 |