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.MarshalNativeToManaged 및 ICustomMarshaler.MarshalManagedToNative 메서드를 호출하여 호출을 처리할 알맞은 래퍼를 활성화합니다. 다음 표에서는 ICustomMarshaler 인터페이스에서 노출하는 메서드에 대해 설명합니다.
메서드 |
설명 |
---|---|
네이티브 데이터에 대한 포인터를 관리되는 개체로 마샬링합니다. 이 메서드는 인수로 전달되는 관리되지 않는 인터페이스를 마샬링할 수 있는 사용자 지정 RCW(런타임 호출 가능 래퍼)를 반환합니다. 마샬러는 해당 형식의 사용자 지정 RCW 인스턴스를 반환해야 합니다. |
|
관리되는 개체를 네이티브 데이터에 대한 포인터로 마샬링합니다. 이 메서드는 인수로 전달되는 관리되는 인터페이스를 마샬링할 수 있는 사용자 지정 CCW(COM 호출 가능 래퍼)를 반환합니다. 마샬러는 해당 형식의 사용자 지정 CCW 인스턴스를 반환해야 합니다. |
|
마샬러에서 MarshalManagedToNative 메서드가 반환하는 네이티브 데이터를 정리할 수 있도록 합니다. |
|
MarshalNativeToManaged 메서드가 반환하는 관리되는 데이터를 마샬러에서 정리할 수 있도록 합니다. |
|
마샬링될 관리되지 않는 데이터의 크기를 반환합니다. |