상호 운용성 개요

상호 운용성은 비관리 코드에 대한 기존 투자를 보존하고 활용할 수 있도록 합니다. CLR(공용 언어 런타임)의 제어로 실행되는 코드는 관리 코드이고 CLR 외부에서 실행되는 코드는 관리되지 않는 코드입니다. COM, COM+, C++ 구성 요소, ActiveX 구성 요소 및 Microsoft Windows API는 비관리 코드의 예입니다.

.NET에서는 플랫폼 호출 서비스, System.Runtime.InteropServices 네임스페이스, C++ 상호 운용성 및 COM 상호 운용성(COM interop)을 통해 비관리 코드와의 상호 운용이 가능합니다.

플랫폼 호출

플랫폼 호출은 Windows API의 함수와 같이 DLL(동적 연결 라이브러리)에서 구현된 관리되지 않는 함수를 관리 코드가 호출할 수 있도록 하는 서비스입니다. 이 서비스는 내보낸 함수를 찾아서 호출하고 필요에 따라 상호 운용 경계를 가로질러 인수(정수, 문자열, 배열, 구조체 등)를 마샬링합니다.

자세한 내용은 관리되지 않는 DLL 함수 사용플랫폼 호출을 사용하여 WAV 파일을 재생하는 방법을 참조하세요.

참고 항목

CLR(공용 언어 런타임)은 시스템 리소스에 대한 액세스를 관리합니다. CLR 외부에 있는 비관리 코드를 호출하면 이 보안 메커니즘을 우회하므로 보안 위험이 제기됩니다. 예를 들어 비관리 코드는 CLR 보안 메커니즘을 우회하여 비관리 코드의 리소스를 직접 호출할 수 있습니다. 자세한 내용은 .NET의 보안을 참조하세요.

C++ Interop

IJW(It Just Works)라고도 하는 C++ interop를 사용하여 네이티브 C++ 클래스를 래핑할 수 있습니다. C++ interop을 사용하면 C# 또는 다른 .NET 언어로 작성된 코드에서 액세스할 수 있습니다. 네이티브 DLL 또는 COM 구성 요소를 래핑하는 C++ 코드를 작성합니다. 다른 .NET 언어와 달리 Visual C++에는 동일한 애플리케이션과 동일한 파일에서도 관리 및 관리되지 않는 코드를 사용할 수 있는 상호 운용성 지원이 있습니다. 그런 다음 /clr 컴파일러 스위치로 관리되는 어셈블리를 생성하여 C++ 코드를 빌드합니다. 마지막으로, C# 프로젝트의 어셈블리에 대한 참조를 추가하고 다른 관리되는 클래스를 사용하는 것처럼 래핑된 개체를 사용합니다.

C#에 COM 구성 요소 노출

C# 프로젝트에서 COM 구성 요소를 사용할 수 있습니다. 일반적인 단계는 다음과 같습니다.

  1. COM 구성 요소를 찾아서 사용하고 등록합니다. regsvr32.exe를 사용하여 COM DLL을 등록하거나 등록을 취소합니다.
  2. COM 구성 요소 또는 형식 라이브러리에 대한 참조를 프로젝트에 추가합니다. 참조를 추가하면 Visual Studio에서는 형식 라이브러리를 입력으로 사용하는 Tlbimp.exe(형식 라이브러리 가져오기)를 통해 .NET interop 어셈블리를 출력합니다. RCW(런타임 호출 가능 래퍼)라고도 하는 어셈블리는 형식 라이브러리에 있는 인터페이스 및 COM 클래스를 래핑하는 인터페이스 및 관리되는 클래스를 포함합니다. Visual Studio에서는 생성된 어셈블리에 대한 참조를 프로젝트에 추가합니다.
  3. RCW에 정의된 클래스의 인스턴스를 만듭니다. 해당 클래스의 인스턴스를 만들면 COM 개체의 인스턴스가 만들어집니다.
  4. 다른 관리되는 개체와 동일한 방식으로 개체를 사용합니다. 개체가 가비지 수집에 의해 회수되면 COM 개체 인스턴스도 메모리에서 해제됩니다.

자세한 내용은 .NET Framework에 COM 구성 요소 노출을 참조하세요.

COM에 C# 노출

COM 클라이언트는 올바르게 노출된 C# 형식을 사용할 수 있습니다. C# 형식을 노출하는 기본 단계는 다음과 같습니다.

  1. C# 프로젝트에서 Interop 특성을 추가합니다. C# 프로젝트 속성을 수정하여 어셈블리 COM을 표시할 수 있습니다. 자세한 내용은 어셈블리 정보 대화 상자를 참조하세요.
  2. COM 형식 라이브러리를 생성하고 COM 사용을 위해 등록합니다. C# 프로젝트 속성을 수정하여 COM interop에 대한 C# 어셈블리를 자동으로 등록할 수 있습니다. Visual Studio에서는 Regasm.exe(어셈블리 등록 도구)를 사용하며, 관리되는 어셈블리를 입력으로 사용하는 /tlb 명령줄 스위치를 통해 형식 라이브러리를 생성합니다. 이 형식 라이브러리는 어셈블리의 public 형식을 설명하고, COM 클라이언트가 관리되는 클래스를 만들 수 있도록 레지스트리 항목을 추가합니다.

자세한 내용은 .NET Framework 구성 요소를 COM에 노출예제 COM 클래스를 참조하세요.

참고 항목