다음을 통해 공유


ATLDuck 샘플: ATL로 연결 지점 사용

업데이트: 2007년 11월

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

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

또한 이 샘플은 다른 프로세스의 인터페이스에 연결하는 데 필요한 마샬링 코드를 atlduckPS와 duckPS를 통해 사용합니다.

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

    • atlduck.exe 서버의 마샬링 DLL인 atlduckPS.dll

    • EXE 클라이언트인 duck.exe

    • duck.exe 클라이언트의 마샬링 DLL인 duckPS.dll

이 샘플을 실행하려면

  1. duck.exe의 인스턴스를 하나 이상 시작합니다.

    참고:

    duck.exe의 여러 인스턴스를 열면 연결 지점을 더 효과적으로 볼 수 있습니다.

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

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

클래스 및 키워드

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

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

참고 항목

기타 리소스

ATL 샘플