Windows Forms 및 관리되지 않는 응용 프로그램 개요
Windows Forms 응용 프로그램과 컨트롤을 관리되지 않는 응용 프로그램과 상호 운용할 때는 몇 가지 유의할 사항이 있습니다. 다음 단원에서는 Windows Forms 응용 프로그램과 컨트롤이 지원하는 시나리오 및 구성과 지원하지 않는 시나리오 및 구성을 설명합니다.
Windows Forms 컨트롤 및 ActiveX 응용 프로그램
Windows Forms 컨트롤은 ActiveX 컨트롤을 호스팅하도록 설계된 응용 프로그램에서 지원되지 않습니다. 단, Microsoft Internet Explorer와 MFC(Microsoft Foundation Classes)의 경우는 예외입니다. Visual Studio .NET 2003 이전 버전의 Visual Studio에 있는 ActiveX 테스트 컨테이너를 포함하여 ActiveX 컨트롤을 호스팅할 수 있는 다른 응용 프로그램 및 개발 도구에서는 Windows Forms 컨트롤을 호스팅할 수 없습니다.
이러한 제약은 COM interop를 통해 Windows Forms 컨트롤을 사용하는 경우에도 적용됩니다. Internet Explorer에서만 CCW(COM 호출 가능 래퍼)를 통해 Windows Forms 컨트롤을 사용할 수 있습니다. COM interop에 대한 자세한 내용은 다음을 참조하십시오.
COM Interop(Visual Basic) 및 고급 수준의 COM 상호 운용성.
다음 표에서는 Windows Forms 컨트롤에 사용할 수 있는 ActiveX 호스팅 지원을 보여 줍니다.
Windows Forms 버전 |
지원 |
---|---|
.NET Framework 버전 1.0 |
Internet Explorer 5.01 이상 버전 |
.NET Framework 버전 1.1 이상 |
Internet Explorer 5.01 이상 버전 MFC(Microsoft Foundation Classes) 7.0 이상 |
Windows Forms 구성 요소를 ActiveX 컨트롤로 호스팅
.NET Framework 1.1의 경우 지원이 확장되어 MFC 7.0 이상 버전을 포함합니다. 이 지원에는 MFC 7.0 이상 ActiveX 컨트롤 컨테이너와 완벽하게 호환되는 모든 컨테이너가 포함됩니다.
그러나 Windows Forms 컨트롤을 ActiveX 컨트롤로 등록할 수는 없습니다. 또한 Windows Forms 컨트롤에 대해 com.ms.win32.Ole32.CoCreateInstance 메서드를 호출할 수 없습니다. Windows Forms 컨트롤의 관리되는 활성화만 지원됩니다. Windows Forms 컨트롤을 만든 후에는 MFC 응용 프로그램에서 ActiveX 컨트롤과 같은 방법으로 Windows Forms 컨트롤을 호스팅할 수 있습니다.
관리되지 않는 응용 프로그램에서 Windows Forms 컨트롤을 사용하려면 관리되지 않는 CLR 호스팅 API를 사용하여 CLR을 호스팅하거나 C++ interop 기능을 사용해야 합니다. C++ interop 기능을 사용하는 것이 좋습니다.
COM 클라이언트 응용 프로그램의 Windows Forms
Visual Basic 6.0 응용 프로그램 또는 MFC 응용 프로그램과 같은 COM 클라이언트 응용 프로그램에서 Windows Form을 열면 폼이 예기치 않게 동작할 수 있습니다. 예를 들어, Tab 키를 누를 경우 포커스가 다른 컨트롤로 이동하지 않을 수 있습니다. 명령 단추에 포커스가 있을 때 Enter 키를 누르면 단추의 Click 이벤트가 발생하지 않습니다. 또한 키 입력이나 마우스 동작이 예상과 다르게 작동할 수 있습니다.
이러한 동작은 관리되지 않는 응용 프로그램에서 Windows Forms이 제대로 실행되는 데 필요한 메시지 루프 지원을 구현하지 않은 경우에 발생합니다. COM 클라이언트 응용 프로그램에서 제공하는 메시지 루프는 Windows Forms 메시지 루프와 근본적으로 다릅니다.
응용 프로그램의 메시지 루프는 스레드의 메시지 큐에서 메시지를 검색하고 변환한 다음 응용 프로그램에 보내 처리되도록 하는 내부 프로그램 루프입니다. Windows Form의 메시지 루프는 Visual Basic 6.0 응용 프로그램 및 MFC 응용 프로그램과 같은 이전 응용 프로그램에서 제공하는 메시지 루프와 다른 아키텍처를 갖고 있습니다. 메시지 루프에 게시되는 창 메시지는 Windows Form에서 예상하는 방법과 다르게 처리될 수 있습니다. 그로 인해 예기치 못한 동작이 발생할 수 있습니다. 일부 키 입력 조합이나 마우스 동작이 예상과 다르게 작동하거나 일부 이벤트가 예상처럼 발생하지 않을 수 있습니다.
상호 운용성 문제 해결
Application.Run 메서드를 사용하여 만들어지는 .NET Framework 메시지 루프에 폼을 표시하여 이러한 문제를 해결할 수 있습니다.
COM 클라이언트 응용 프로그램에서 Windows Form이 올바르게 작동하도록 하려면 응용 프로그램을 Windows Forms 메시지 루프에서 실행해야 합니다. 이렇게 하려면 다음 방법 중 하나를 사용합니다.
Form.ShowDialog 메서드를 사용하여 Windows Form을 표시합니다. 자세한 내용은 방법: ShowDialog 메서드로 Windows Form을 표시하여 COM Interop 지원을 참조하십시오.
각 Windows Form을 새 스레드에서 표시합니다. 자세한 내용은 방법: 각 Windows Form을 별개의 스레드에서 표시하여 COM Interop 지원을 참조하십시오.
참고 항목
작업
방법: ShowDialog 메서드로 Windows Form을 표시하여 COM Interop 지원
방법: 각 Windows Form을 별개의 스레드에서 표시하여 COM Interop 지원
참조
Aximp.exe (Windows Forms ActiveX 컨트롤 가져오기)
개념
기타 리소스
Windows Forms 및 관리되지 않는 응용 프로그램