상호 운용성을 사용하면 관리되지 않는 코드에 대한 기존 투자를 보존하고 활용할 수 있습니다. CLR(공용 언어 런타임)의 제어로 실행되는 코드는 관리 코드이며 CLR 외부에서 실행되는 코드는 관리되지 않는 코드입니다. COM, COM+, C++ 구성 요소, ActiveX 구성 요소 및 Microsoft Windows API는 관리되지 않는 코드의 예입니다.
.NET을 사용하면 플랫폼 호출 서비스, 네임스페이스, System.Runtime.InteropServices C++ 상호 운용성 및 COM 상호 운용성(COM interop)을 통해 관리되지 않는 코드와의 상호 운용성을 사용할 수 있습니다.
플랫폼 함수 호출
플랫폼 호출 은 관리 코드가 Microsoft 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 구성 요소를 사용할 수 있습니다. 일반적인 단계는 다음과 같습니다.
- 사용할 COM 구성 요소를 찾아 등록합니다. regsvr32.exe 사용하여 COM DLL을 등록하거나 등록 취소합니다.
- COM 구성 요소 또는 형식 라이브러리에 대한 참조를 프로젝트에 추가합니다. 참조를 추가하면 Visual Studio는 형식 라이브러리를 입력으로 사용하는 Tlbimp.exe(형식 라이브러리 가져오기)를 사용하여 .NET interop 어셈블리를 출력합니다. RCW(런타임 호출 가능 래퍼)라고도 하는 어셈블리에는 형식 라이브러리에 있는 COM 클래스 및 인터페이스를 래핑하는 관리되는 클래스 및 인터페이스가 포함되어 있습니다. Visual Studio는 생성된 어셈블리에 대한 참조를 프로젝트에 추가합니다.
- RCW에 정의된 클래스의 인스턴스를 만듭니다. 해당 클래스의 인스턴스를 만들면 COM 개체의 인스턴스가 만들어집니다.
- 다른 관리되는 개체를 사용하는 것처럼 개체를 사용합니다. 개체가 가비지 수집에 의해 회수되면 COM 개체의 인스턴스도 메모리에서 해제됩니다.
자세한 내용은 .NET Framework에 COM 구성 요소 노출을 참조하세요.
C#을 COM에 노출
COM 클라이언트는 올바르게 노출된 C# 형식을 사용할 수 있습니다. C# 형식을 노출하는 기본 단계는 다음과 같습니다.
- C# 프로젝트에 interop 특성을 추가합니다. C# 프로젝트 속성을 수정하여 어셈블리 COM을 표시할 수 있습니다. 자세한 내용은 어셈블리 정보 대화 상자를 참조하세요.
- COM 형식 라이브러리를 생성하고 COM 사용을 위해 등록합니다.
C# 프로젝트 속성을 수정하여 COM interop에 대한 C# 어셈블리를 자동으로 등록할 수 있습니다. Visual Studio는 관리되는 어셈블리를 입력으로 사용하는 명령줄 스위치를 사용하여 Regasm.exe(어셈블리 등록 도구)를 사용하여
/tlb
형식 라이브러리를 생성합니다. 이 형식 라이브러리는 어셈블리의public
형식을 설명하고 COM 클라이언트가 관리되는 클래스를 만들 수 있도록 레지스트리 항목을 추가합니다.
자세한 내용은 COM 및 예제 COM 클래스에 .NET Framework 구성 요소 노출을 참조하세요.
참고하십시오
.NET