다음을 통해 공유


StoServe 개요

목적

이 코드 예제의 주요 초점은 복합 파일 구현에 제공된 구조적 스토리지 서비스를 사용하는 것입니다. 표준 IStorageIStream 인터페이스의 사용에 대해 설명합니다. StoServeStoClien 코드 예제와 함께 작동하여 클라이언트와 서버에서 복합 파일 스토리지를 공동으로 사용하는 방법을 보여 줍니다.

기능

StoServe 샘플에서는 사실상 빈 드로잉 용지 시트를 나타내는 COPaper COM 개체를 소개합니다.

COPaper 개체는 지정된 색과 너비의 "잉크"를 사용하여 용지 표면에 자유 형식 그리기를 위한 기능 집합을 노출합니다. 이 기능은 여러 버전의 Microsoft Visual C++ "scribble" 자습서 샘플과 외형적으로 비슷합니다. StoServe/StoClien 샘플의 차이점은 주로 COM 기술을 기반으로 하는 아키텍처 기반입니다. COPaper 개체의 전자 도면 용지 기능은 사용자 지정 IPaper 인터페이스를 통해 클라이언트에서 사용할 수 있습니다. COPaper는 IPaper 인터페이스를 구현합니다. 클라이언트와 서버 간에 명확한 아키텍처 구분이 유지됩니다. COPaper에서 GUI(그래픽 사용자 인터페이스)를 제공하지 않습니다. COPaper 개체의 디자인은 모든 GUI 동작에 대해 클라이언트를 사용합니다. COPaper는 그려진 잉크 데이터의 서버 기반 캡처 및 스토리지만 캡슐화합니다.

COPaper 표면에 그려진 잉크 데이터는 복합 파일에 저장하고 로드할 수 있습니다. IPaper, SaveLoad 메서드는 IStorage 인터페이스 포인터를 허용합니다. COPaper는 이 클라이언트 제공 IStorage 인터페이스를 사용하여 그리기 데이터를 저장합니다.

COPaper는 In-Process 서버에 저장되며 사용자 지정 COM 구성 요소로 공개적으로 제공됩니다. 이 자습서 시리즈의 다른 서버와 마찬가지로 StoServe는 자체 등록 COM 서버입니다. 이렇게 하면 레지스트리에서 CLSID_DllPaper 등록을 사용하여 클라이언트에서 COPaper 개체 형식을 DllPaper 구성 요소로 사용할 수 있습니다.

이전 CONSERVE 서버와 마찬가지로 연결 가능한 개체 기능은 COPaper에서 지원됩니다. IConnectionPointContainer 인터페이스가 노출되고 적절한 연결점이 구현됩니다. 이 컨텍스트에서 나가는 사용자 지정 IPaperSink 인터페이스는 클라이언트에 알림을 보내는 데 사용하기 위해 선언됩니다.

IPaperIPaperSink 사용자 지정 인터페이스는 IPAPER에서 선언됩니다. H는 공통 형제 \INC 디렉터리에 있습니다. 인터페이스 및 개체에 대한 GUID는 PAPGUIDS에 정의됩니다. H는 동일한 공통 포함 디렉터리에 있습니다.

APPUTIL의 CThreaded 시설은 FRESERVE 샘플과 마찬가지로 StoServe 에서 스레드 안전을 달성하는 데 사용됩니다. COPaper 개체는 CThreaded 클래스에서 파생되고 OwnThis 및 UnOwnThis 메서드를 상속합니다. 이러한 메서드를 사용하면 한 번에 하나의 스레드만 StoServe 서버 및 서버에서 관리하는 COPaper 개체에 액세스할 수 있습니다.

COPaper COM 개체

COPaper COM 개체는 이 StoServe In Process 서버에서 관리하는 단일 개체 형식입니다. COPaper는 표준 IConnectionPointContainer 인터페이스 구현 및 사용자 지정 IPaper 인터페이스 구현을 사용하여 연결 가능한 COM 개체로 생성됩니다. COPaper는 IPaper 인터페이스를 노출하므로 클라이언트는 instance COPaper에서 작은 전자 용지 작업을 수행할 수 있습니다. 필수 작업은 잉크 그리기 시퀀스를 시작하고, COPaper 가상 용지 표면에 잉크 데이터를 그리고, 잉크 그리기 시퀀스를 종료하는 것입니다. 이 체계에서 클라이언트는 마우스 또는 태블릿 디바이스에서 구동하는 GUI 애플리케이션으로 간주됩니다. 클라이언트는 마우스 이동을 COPaper에 대한 요청으로 변환하여 이러한 요청을 잉크 데이터로 저장합니다.

COPaper에는 두 가지 수준의 잉크 데이터 저장이 있습니다. COPaper는 현재 드로잉을 나타내는 RAM 기반 배열에 잉크 데이터를 저장하고 COPaper는 전체 드로잉을 복합 파일에 영구적으로 저장합니다. IPaper 인터페이스의 메서드는 둘 다 수행합니다.

클라이언트는 그린 용지 데이터를 관리하지 않지만 화면에 이미지로 렌더링해야 하므로 COPaper의 IPaper 구현은 클라이언트가 그리기 데이터를 가져올 수 있도록 하는 메서드를 노출해야 합니다. COPaper의 연결 가능한 개체 기술은 이 용도로 사용됩니다. CONNPOINT_PAPERSINK 연결 지점은 COPaper에서 구현되므로 클라이언트가 COPaper에 연결하여 그리기 위한 잉크 데이터를 받을 수 있습니다. 클라이언트는 먼저 COPaper 개체에서 IPaper::Redraw 메서드를 호출하여 현재 드로잉의 모든 잉크 데이터를 요청합니다. 그런 다음, Redraw의 COPaper 구현은 IPaperSink 의 클라이언트 구현을 사용하여 데이터를 클라이언트에 전달합니다.

사용자가 클라이언트에서 대화형으로 그릴 때 데이터를 화면에 즉시 그리면서 저장을 위해 COPaper로 보냅니다. 클라이언트에서 화면을 다시 그려야 하는 경우 COPaper Redraw 메서드를 호출합니다. 이러한 다시 그리기는 애플리케이션에서 일반적입니다. 예를 들어 클라이언트 창이 다른 애플리케이션 창에 의해 오버레이되는 경우 다시 칠이 발생합니다. 클라이언트에 그려진 이미지의 비트맵 렌더링이 있지만 비트맵은 쉽게 손실되며 종종 다시 그려야 합니다. 클라이언트는 다시 그리는 데 필요한 잉크 데이터에 대해 서버의 COPaper를 사용합니다.

이것은 일반적인 클라이언트/서버 노동 부문입니다. 여러 클라이언트가 데이터를 공유해야 하는 경우 특히 적합합니다. COPaper는 이를 사용하도록 코딩됩니다. APPUTIL CThreaded 기능을 사용하여 스레드 안전을 달성합니다. 이 디자인을 활용할 수 있는 애플리케이션은 여러 클라이언트가 일반적으로 보는 드로잉에 기여할 수 있는 공유 화이트보드 애플리케이션입니다. DCOM(분산 COM)에 대한 COM 지원은 네트워크에서 이러한 유형의 작업 그룹 애플리케이션 사용을 지원합니다. 자세한 내용은 이전 REMCLIEN 샘플을 참조하세요.

COPaper 클라이언트/서버 구성표를 좀 더 약간 사용하는 것은 동일한 컴퓨터의 다른 애플리케이션에서 구현된 개체에 대한 동작을 통합하는 것입니다. 이 경우 클라이언트는 동일한 개체에서 관리하는 데이터를 공유하는 별도의 애플리케이션의 ActiveX 컨테이너일 수 있습니다. 이 데이터는 DllPaper 구성 요소가 지원하는 잉크 그리기 데이터가 아닐 수 있습니다. StoServe 는 다른 유형의 공유 데이터를 관리하는 구성 요소를 프로그래밍하기 위한 시작 프레임워크로 사용할 수 있습니다.

지원 정보

StoServe 메이크파일은 레지스트리에 StoServe DllPaper COM 구성 요소를 등록합니다. 이 구성 요소는 해당 구성 요소의 서버로 외부 COM 클라이언트에서 StoServe 를 사용할 수 있기 전에 등록해야 합니다. 이 자체 등록은 REGISTER 샘플에 기본 제공되는 Register.exe 유틸리티를 사용하여 수행됩니다. StoServe를 빌드하거나 실행하려면 먼저 REGISTER 코드 예제를 빌드합니다.

이 COM 자습서 시리즈의 코드 예제를 빌드하고 테스트하도록 시스템을 설정하는 방법에 대한 자세한 내용은 샘플을 빌드하는 방법을 참조하세요. 제공된 메이크파일(MAKEFILE)은 Microsoft NMAKE와 호환됩니다. 디버그 빌드를 만들려면 명령 프롬프트 창에서 NMAKE 명령을 실행합니다.

Microsoft Visual Studio에서 편리하게 사용하기 위해 각 샘플에 대해 프로젝트 파일이 제공됩니다. StoServe 예제에 대한 프로젝트를 로드하려면 다음과 같이 샘플 디렉터리의 명령 프롬프트에서 Visual Studio를 실행할 수 있습니다.

MSDEV STOSERVE. Dsp

Windows Explorer Stoserve.dsp 파일을 두 번 클릭하여 샘플 프로젝트를 Visual Studio에 로드할 수도 있습니다. Visual Studio에서 샘플 원본의 C++ 클래스를 찾아보고 일반적으로 다른 편집-컴파일-디버그 작업을 수행할 수 있습니다.

참고

SDK(플랫폼 소프트웨어 개발 키트)의 일부로 Visual Studio 내에서 이러한 샘플을 컴파일하려면 Visual Studio에서 적절한 디렉터리 경로 설정이 필요합니다. 자세한 내용은 샘플을 빌드하는 방법을 참조하세요.