다음을 통해 공유


연습: .NET 플러그 인 모델 노출

이 연습에서는 .NET 기술을 사용하는 플러그 인 모델을 지원하도록 기존의 Scribble MFC 샘플을 확장하는 방법을 보여 줍니다.

MFC Scribble 솔루션은 .NET 개체 모델을 노출하도록 확장되었습니다. 또한 이 샘플에서는 .NET 플러그 인과 MFC Scribble 솔루션 간의 매끄러운 상호 작용을 가능하게 하는 플러그 인 아키텍처도 노출합니다.

사전 요구 사항

ScribbleDotNET 샘플: CLR 기능을 사용하여 Scribble 확장

이 샘플을 빌드하고 실행하려면

  1. Visual Studio 개발 환경에서 솔루션 파일인 Scribble.sln을 엽니다.

  2. Debug 또는 Release 구성을 사용하여 솔루션을 빌드합니다.

  3. 솔루션 탐색기에서 솔루션 항목 plugins.xml을 엽니다.

  4. plugins.xml 파일에서 어셈블리 요소의 경로 중 앞부분을 빌드에 사용한 구성에 맞도록 변경합니다. 예를 들어, Debug 구성을 사용하여 빌드한 경우 "VBShapes.dll"을 "Debug\VBShapes.dll"로 변경하고 "CSPenColor.dll"을 "Debug\CSPenColor.dll"로 변경합니다.

  5. 빌드된 실행 파일을 실행합니다.

  6. 메뉴 모음에서 Plugins를 선택합니다.

    1. Draw Shapes 메뉴 항목을 선택합니다. 그러면 각각 다른 색상의 세 가지 사각형 윤곽선을 그리는 VBShapes 플러그 인이 실행됩니다.
  7. 메뉴 모음에서 Plugins를 선택합니다.

    1. Change Pen Color 메뉴 항목을 선택합니다. 그러면 .NET 색 대화 상자를 통해 펜 색을 선택할 수 있는 CSPenColor 플러그 인이 실행됩니다.

작동 방식

이 샘플은 다음 두 가지 주요 부분으로 구현됩니다.

  1. 플러그 인 작성기가 사용할 수 있도록 개체 모델 노출

    플러그 인 모델을 구현하기 위해 다음 두 가지 주요 인터페이스가 노출되었습니다. 이러한 인터페이스에 대한 정의를 보려면 ScribbleApp 프로젝트를 참조하십시오.

    • IScribbleApp – 이 인터페이스는 플러그 인 작성기와 실행 중인 Scribble 응용 프로그램과의 상호 작용을 가능하게 하는 일련의 기능을 노출합니다. 이 인터페이스는 Scribble에 의해 구현되며(Scribble 프로젝트의 ScribbleApp.cpp 참조) 구현된 인터페이스의 인스턴스는 아래에서 설명하는 IScribblePlugin의 Run() 멤버 함수로 전달됩니다.

    • IScribblePlugin – 이 인터페이스는 플러그 인 작성기에 의해 구현됩니다. 플러그 인 작성기는 IScribbleApp에 의해 노출된 기능을 사용하여 플러그 인을 구현합니다.

  2. 플러그 인을 찾고 로드하고 실행하도록 기본 Scribble 응용 프로그램 확장

    • 먼저 로드할 플러그 인의 목록이 들어 있는 XML 파일을 구문 분석합니다. 발견된 각 플러그 인을 로드하고 System.Reflection을 사용하여 그 형식이 올바른지 확인합니다. 즉, 리플렉션을 사용하여 플러그 인 모듈에 의해 노출된 형식을 검색하고 그 중 하나가 노출된 IPlugin 인터페이스를 구현하는지 확인합니다. 이 인터페이스의 구현은 Scribble 프로젝트의 PluginBld.cpp를 참조하십시오.

    • 그런 다음 CScribbleApp는 PluginBld.cpp에서 구현된 루틴을 사용하여 발견된 모든 플러그 인의 목록을 가져옵니다. 이 목록에 있는 각 플러그 인에 대해 Plugins 메뉴 아래 메뉴 항목이 동적으로 생성됩니다. 사용자가 Plugins에서 메뉴 항목을 선택하면 해당 플러그 인이 실행됩니다.

사용된 기술

  • XML을 사용하여 플러그 인의 위치 지정

  • 리플렉션을 사용하여 XML 파일에 지정된 플러그 인이 올바른 형식인지 확인

  • 플러그 인을 만들기 위한 개체 모델 정의

  • C++ 응용 프로그램에서 플러그 인 로드 및 실행

참고 항목

작업

SCRIBBLE Sample: MFC MDI Drawing Application