ICustomMarshaler 인터페이스 구현

사용자 지정 마샬러를 사용하려면 마샬링할 매개 변수 또는 필드에 MarshalAsAttribute 특성을 적용해야 합니다. 이 특성은 적절한 래퍼를 활성화하는 사용자 지정 마샬러를 식별합니다.

다음 C# 코드에서는 모든 사용자 지정 마샬러에서 구현해야 하는 기본 인터페이스를 표시합니다.

namespace System.Runtime.InteropServices
{
    using System;

[System.Runtime.InteropServices.ComVisible(true)]
    public interface ICustomMarshaler
    {
     Object MarshalNativeToManaged( IntPtr pNativeData );
     IntPtr MarshalManagedToNative( Object ManagedObj );
     void CleanUpNativeData( IntPtr pNativeData );
     void CleanUpManagedData( Object ManagedObj );
     int GetNativeDataSize();
    }
}

사용자 지정 마샬러에서는 ICustomMarshaler 인터페이스를 구현하여 런타임에 적절한 래퍼를 제공해야 합니다.

또한 사용자 지정 마샬러의 인스턴스를 검색하기 위해 호출할 수 있는 다음 정적 메서드를 구현해야 합니다.

static ICustomMarshaler *GetInstance(String *pstrCookie);

런타임은 인수를 처음 마샬링해야 할 때 사용자 지정 마샬러를 만든 다음 ICustomMarshaler.MarshalNativeToManagedICustomMarshaler.MarshalManagedToNative 메서드를 호출하여 호출을 처리할 알맞은 래퍼를 활성화합니다. 다음 표에서는 ICustomMarshaler 인터페이스에서 노출하는 메서드에 대해 설명합니다.

메서드

설명

MarshalNativeToManaged

네이티브 데이터에 대한 포인터를 관리되는 개체로 마샬링합니다. 이 메서드는 인수로 전달되는 관리되지 않는 인터페이스를 마샬링할 수 있는 사용자 지정 RCW(런타임 호출 가능 래퍼)를 반환합니다. 마샬러는 해당 형식의 사용자 지정 RCW 인스턴스를 반환해야 합니다.

MarshalManagedToNative

관리되는 개체를 네이티브 데이터에 대한 포인터로 마샬링합니다. 이 메서드는 인수로 전달되는 관리되는 인터페이스를 마샬링할 수 있는 사용자 지정 CCW(COM 호출 가능 래퍼)를 반환합니다. 마샬러는 해당 형식의 사용자 지정 CCW 인스턴스를 반환해야 합니다.

CleanUpNativeData

마샬러에서 MarshalManagedToNative 메서드가 반환하는 네이티브 데이터를 정리할 수 있도록 합니다.

CleanUpManagedData

MarshalNativeToManaged 메서드가 반환하는 관리되는 데이터를 마샬러에서 정리할 수 있도록 합니다.

GetNativeDataSize

마샬링될 관리되지 않는 데이터의 크기를 반환합니다.

참고 항목

개념

사용자 지정 마샬링

마샬링 형식 정의

대체 마샬러 사용