다음을 통해 공유


ATLDuck 특성 샘플: ATL과 함께 연결 지점 사용

업데이트: 2007년 11월

ATLDuck 특성 샘플은 atlduck과 duck이라는 두 개의 프로젝트로 구성되어 있습니다. duck 프로젝트에서는 IDuckInt 인터페이스를 구현하는 개체의 인스턴스를 만듭니다. 이 인터페이스에는 Flap, Paddle, Quack 및 Walk라는 네 개의 멤버 함수가 포함되어 있습니다.

두 번째 프로젝트인 atlduck에는 IDuckInt 인터페이스에 대한 연결 지점이 포함되어 있습니다. 즉, 이 프로젝트에서는 인터페이스 사용 방법을 알지만 인터페이스를 구현하지는 않습니다. 이 개체의 인스턴스는 하나만 만들어집니다. 두 응용 프로그램 간에 연결이 설정되면 atlduck은 IConnectionPoint::Advise를 호출한 싱크에 대해 IDuckInt 인터페이스에서 함수를 호출합니다.

ATLDuck에서는 집합체, event_source 및 event_receiver를 포함한 다양한 IDL, COM 및 컴파일러 특성을 보여 줍니다. DuckInt 클래스는 집합체 특성을 "never"로 지정함으로써 비집합체로 만들어집니다. DuckDoer 클래스는 com event_source로 설정되고 DuckInt 클래스는 com event_receiver로 설정됩니다. 이때 레이아웃 종속성은 true로 설정되지 않습니다.

ATLDuck 샘플은 이 샘플의 특성을 사용하지 않는 버전입니다.

보안 정보:

이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다.

샘플 및 이를 설치하기 위한 지침을 가져오려면

  • Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.

    자세한 내용은 샘플 파일 찾기를 참조하십시오.

  • 최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.

  • 컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.

샘플 빌드 및 실행

이 샘플을 빌드하려면

  1. atlduck.sln 솔루션 파일을 엽니다.

  2. 빌드 메뉴에서 솔루션 빌드를 클릭합니다. 이렇게 하면 두 개의 프로젝트를 모두 빌드하고 필요한 등록을 수행할 수 있습니다. 이때 다음 파일이 만들어집니다.

    • EXE 서버인 atlduck.exe

    • EXE 클라이언트인 duck.exe

이 샘플을 실행하려면

  1. 디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다. 이렇게 하면 atlduck 서버 및 duck 클라이언트의 한 개의 인스턴스가 시작됩니다. 여러 개의 클라이언트를 실행하려면 duck.exe가 있는 디렉터리를 탐색하여 명령 프롬프트에서 수동으로 실행합니다.

  2. 대화 상자가 나타납니다. 이 대화 상자에서 Create DoDuck Object 단추를 클릭합니다. 이 단추를 클릭하면 응용 프로그램에서 atlduck을 실행하여 ID CLSID_DuckDoer 클래스가 포함된 개체 인스턴스를 만듭니다.

  3. 그런 다음에는 atlduck.exe에서 새 대화 상자를 표시합니다. 이 대화 상자는 활성 싱크 및 싱크의 쿠키에 대한 모든 연결이 포함된 목록 상자뿐 만 아니라 IDuckInt 인터페이스의 각 함수에 대한 단추를 보여 줍니다. duck 대화 상자에서 연결 지점을 Advise하거나 Unadvise할 수 있습니다. 선택한 작업에 따라 소스에서 알림을 받게 되거나 받지 않게 됩니다. 알림을 받는 경우에는 상태 편집 필드에 알림이 표시됩니다. 또한 ATLDuck에서는 연결이 advise될 때 연결 지점에서 제공하는 쿠키의 값도 보여 줍니다.

특성

이 샘플에서는 다음의 특성을 사용합니다.

  • ATLDuck   aggregatable, coclass, dispinterface, event_source, exe, helpstring, id, module, name, progid, uuid, vi_progid

  • ATLDuck/Duck   aggregatable, coclass, default, dispinterface, event_receiver, exe, helpstring, id, iid_is, in, module, name, object, out, progid, unique, uuid, version, vi_progid

클래스 및 키워드

이 샘플에서는 다음의 클래스를 사용합니다.

CDialog (MFC), CComObject (ATL), IConnectionPointImpl<CDuckDoer> (ATL)

이 샘플에서는 다음의 키워드를 사용합니다.

_ASSERTE; _tcslen; _VERIFY; AddRef; Advise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::Unlock; CComObjectRootEx; CDialogImpl; CenterWindow; CoInitialize; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_HANDLER; COMMAND_ID_HANDLER; CONNECTION_POINT_ENTRY; CoSuspendClassObjects; CoUninitialize; Create; DECLARE_CLASSFACTORY_SINGLETON; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DestroyWindow; DispatchMessage; EnableWindow; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MSG_MAP; END_OBJECT_MAP; ExitProcess; FindConnectionPoint; GetCommandLine; GetDC; GetDlgItem; GetMessage; GetTextExtentPoint32; IConnectionPointContainerImpl; IConnectionPointImpl; Init; IsWindowVisible; MESSAGE_HANDLER; MessageBox; OBJECT_ENTRY; OleInitializeCoCreateInstance; OnCancel; OnFlap; OnInitDialog; OnOK; OnPaddle; OnWalk OnQuack; PostThreadMessage; QueryInterface; RecalcListboxExtent; RegisterClassObjects; RegisterServer; reinterpret_cast; ReleaseDC; RevokeClassObjects; SendMessage; SetOwner; SetWindowText; ShowStatus; ShowWindow; Unadvise; UnregisterServer; UNUSED_ALWAYS; UpdateRegistryFromResource; UpdateWindow; USES_CONVERSION

참고:

이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다.

참고 항목

기타 리소스

ATL 특성 샘플