ATL 가진 COM 개체 집계 방법

기술 자료 번역 기술 자료 번역
기술 자료: 173823 - 이 문서가 적용되는 제품 보기.
참고 Microsoft Visual C++ .NET (2002) Microsoft .NET Framework에서 제공하는 관리되는 코드 모델과 관리되지 않는 네이티브 Microsoft Windows 코드 모델을 모두 지원합니다. 이 문서에 나와 있는 정보는 관리되지 않는 Visual C++ 코드에만 적용됩니다.
모두 확대 | 모두 축소

이 페이지에서

요약

다음 단계를 수행하여 COM 집계 방법을 보여 주는 ATL 프로젝트에 개체:
  1. IUnknown 포인터를 클래스 개체를 추가하고 생성자에 NULL로 초기화하십시오.
  2. (FinalConstruct 동안) 내부 집계된 개체 참조 횟수가 다음 감소시킵니다 증가시키는 경우 삭제된 개체를 보호하려면 DECLARE_PROTECT_FINAL_CONSTRUCT 매크로 카운트를 0으로 추가하십시오.

    참고: Visual C++ .NET 사용 중인 경우 마법사가 이 자동으로 추가합니다.
  3. COM_INTERFACE_ENTRY_AGGREGATE 매크로 두 번째 매개 변수로 정의된 IUnknown 포인터를 사용하십시오. 첫 번째 매개 변수는 노출할 내부 개체의 인터페이스의 IID를 것입니다.
  4. 집계를 만들려면 FinalConstruct()를 재정의하십시오.
  5. 해당 IUnknown 릴리스 FinalRelease() 재정의할 포인터.

추가 정보

사용 및 집계 인터페이스에서 동안 FinalConstruct 릴리스 DECLARE_PROTECT_FINAL_CONSTRUCT 매크로 클래스 개체의 정의를 추가해야 합니다.

다음은 모든 네 가지 클래스 정의에 수행할 단계 사용하여 샘플입니다. 이 간단한 개체 CInnObj 다른 단순 개체를 집계합니다 COutObj 있습니다.

예제 코드

   class ATL_NO_VTABLE COutObj :
         public CComObjectRootEx<CComSingleThreadModel>,
         public CComCoClass<COutObj, &CLSID_OutObj>,
         public IDispatchImpl<IOutObj, &IID_IOutObj, &LIBID_OUTEROBJLib>
   {
   public:
      COutObj() : m_pInnerUnk(NULL) // Step 1
      {
      }
      DECLARE_GET_CONTROLLING_UNKNOWN()
      DECLARE_REGISTRY_RESOURCEID(IDR_OUTOBJ)
      DECLARE_PROTECT_FINAL_CONSTRUCT() // Step 2

      BEGIN_COM_MAP(COutObj)
         COM_INTERFACE_ENTRY(IOutObj)
         COM_INTERFACE_ENTRY(IDispatch)
         COM_INTERFACE_ENTRY_AGGREGATE(IID_IInnObj, m_pInnerUnk) // Step 3
      END_COM_MAP()

      // Start of step 4
      HRESULT FinalConstruct()
      {
         HRESULT hr;
         CLSID   clsidInner;

         hr = CLSIDFromProgID(L"InnObj.InnObj.1", &clsidInner);
         if (hr == S_OK)
            hr = CoCreateInstance(clsidInner, GetControllingUnknown(),
                                  CLSCTX_INPROC_SERVER, IID_IUnknown,
                                  (void**)&m_pInnerUnk);
         return hr;
      } // End of step 4

      void FinalRelease(){m_pInnerUnk->Release();} // Step 5

      // IOutObj
   public:
      STDMETHOD(Test)();
   private:
      LPUNKNOWN m_pInnerUnk; // Step 1
   };
				
같은 ATL 서버 내부 개체인 경우 다음 코드를 CoCreateInstance 않고 내부 개체를 만들 수 있습니다:
   HRESULT FinalConstruct()
      {
         return  CInnObj::_CreatorClass::CreateInstance(
             GetControllingUnknown(), IID_IUnknown,
             (void**)&m_pInnerUnk);

      }
				

참조

Visual C++ 설명서를 온라인: Visual C++ 설명서를; C/C++ 언어 및 C++ 라이브러리, ATL, 문서, COM 및 ATL 소개; COM 소개, 집계

Visual C++ 설명서를 온라인: Visual C++ 설명서를; C/C++ 언어 및 C++ 라이브러리, ATL, 문서, ATL COM 개체의 기본, 않은 집계 만들기

속성

기술 자료: 173823 - 마지막 검토: 2004년 6월 29일 화요일 - 수정: 3.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ActiveX Template Library 3.0?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft ActiveX Template Library 2.1?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
키워드:?
kbmt kbarchitecture kbhowto KB173823 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com