다음을 통해 공유


COM 호출 가능 래퍼 사용자 지정

업데이트: 2007년 11월

CCW를 사용자 지정하는 것은 간단한 작업입니다. COM 클라이언트에 노출하려는 형식에 비표준 마샬링 요구 사항이 있는 경우에는 메서드 매개 변수, 클래스 필드 또는 반환 값에 System.Runtime.InteropServices.MarshalAsAttribute 특성을 적용하여 마샬링 동작을 변경합니다.

다음 그림에서 보여 주는 것과 같이, 래퍼를 사용자 지정하지 않고도 관리되는 DLL을 내보낼 수 있습니다(그림의 왼쪽에 표시). 또는 마샬링 정보를 소스에 추가하고 ,컴파일하고, 형식 라이브러리 내보내기(Tlbexp.exe)를 사용하여 수정된 DLL을 내보내고 사용자 지정 래퍼를 생성할 수 있습니다.

내보낸 DLL의 마샬링 정보

![형식 라이브러리 내보내기](images)

참고:

COM에 노출하려는 관리되는 모든 형식, 메서드, 속성, 필드 및 이벤트는 공용이어야 합니다. 형식에는 COM을 통해 호출될 수 있는 유일한 생성자인 공용 기본 생성자가 있어야 합니다. 자세한 내용은 상호 운용할 .NET 형식의 정규화를 참조하십시오.

관리 코드와 비관리 코드 간에 데이터를 마샬링할 때 interop 마샬러에서는 전달되는 데이터 표현을 인식해야 합니다.

  • blittable 형식의 경우 관리되는 표현과 관리되지 않는 표현은 항상 똑같습니다. 예를 들어, 4바이트 정수는 항상 4바이트 정수로 마샬링됩니다. interop 마샬러에서는 관리되는 시그니처를 사용하여 데이터 표현을 확인합니다.

  • 비 blittable 형식의 경우, interop 마샬러에서는 관리되는 표현을 메서드 시그니처에서 인식하지만 관리되지 않는 표현은 메서드 시그니처에서 인식할 수 없습니다. 비 blittable 형식을 마샬링하는 데는 다음 기술 중 하나를 사용할 수 있습니다.

    • 마샬러가 관리되는 표현에서 표현을 유추할 수 있도록 합니다.

    • 관리되지 않는 데이터 표현을 명시적으로 제공합니다.

예를 들어, 사용자가 명시적으로 MarshalAsAttribute를 적용하여 문자열을 LPWSTR 등의 다른 형식으로 마샬링하지 않으면 문자열은 관리 코드에서 비관리 코드로 마샬링될 때 BSTR 형식으로 변환됩니다. 이 특성은 다음 예제에서 보여 주는 것처럼 형식 정의의 소스 내에 있는 매개 변수, 필드 또는 반환 값에 적용할 수 있습니다.

매개 변수에 MarshalAsAttribute 적용

Public Sub M1
(<MarshalAs(UnmanagedType.LPWStr)> msg As String)
public void M1
([MarshalAs(UnmanagedType.LPWStr)]String msg);

클래스 내의 필드에 MarshalAsAttribute 적용

Class MsgText
<MarshalAs(UnmanagedType.LPWStr)> Public msg As String
End Class
class MsgText {
[MarshalAs(UnmanagedType.LPWStr)] Public String msg;
}

반환 값에 MarshalAsAttribute 적용

Public Function M2() _
As <MarshalAs(UnmanagedType.LPWStr)> String
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage();

System.Runtime.InteropServices.UnmanagedType 열거형을 설정하여 관리되지 않는 형식의 원하는 형식을 지정합니다. 앞의 시그니처에서 msg 데이터는 null로 끝나는 유니코드 문자열(LPWStr) 버퍼로 마샬링됩니다.

때때로 interop 마샬러에서는 관리되는 데이터 형식과 관리되지 않는 데이터 형식에서 제공하는 것보다 많은 정보를 필요로 합니다. 예를 들어, 배열을 마샬링하려면 요소 형식, 차수, 크기 및 배열 범위를 제공해야 합니다. MarshalAsAttribute를 사용하면 필요한 추가 정보를 지정할 수 있습니다.

참고 항목

개념

COM 데이터 형식

런타임 호출 가능 래퍼 사용자 지정

참조

COM 호출 가능 래퍼 사용자 지정

기타 리소스

COM Interop를 사용하여 데이터 마샬링

기본 마샬링 동작