В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Как агрегировать объект COM с ATL

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:173823
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Примечание Microsoft Visual C++.NET (2002) поддерживает управляемый код модель, предоставляемых платформой Microsoft.NET Framework и неуправляемый машинный код Модель кода Microsoft Windows. В данной статье применима только к неуправляемый код Visual C++.
Аннотация
Следующие шаги демонстрируют статистические COM объект в проект ATL:
  1. Добавить указатель IUnknown для объекта класса и инициализировать его значение NULL в конструкторе.
  2. Добавить макрос DECLARE_PROTECT_FINAL_CONSTRUCT для защиты объект от удаления if (FinalConstruct) в процессе внутренней Сводный объект увеличивает счетчик ссылок, а затем уменьшает значение счетчика 0.

    ПРИМЕЧАНИЕ: Если вы используете Visual C++.NET, мастер добавляет это для Вы.
  3. Используйте указатель IUnknown, определяется как второй параметр макросов COM_INTERFACE_ENTRY_AGGREGATE. Первый параметр — Идентификатор IID интерфейса внутренний объект, который требуется Предоставляйте.
  4. Переопределить FinalConstruct() для создания статистическая функция.
  5. Переопределить FinalRelease() для освобождения IUnknown указатель.
Дополнительная информация
Если при использовании версии интерфейса от статистической функции во время FinalConstruct необходимо добавить макрос DECLARE_PROTECT_FINAL_CONSTRUCT Определение объекта класса.

Ниже приведен пример со всеми четыре действия, в определении класса. Это простой объект COutObj объединяет другой простой объект CInnObj.

Пример кода

   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++; Библиотека шаблонных классов; Статьи; Введение в COM и ATL; Знакомство с COM; Агрегат

Visual C++ документации: Visual C++ книг; Язык C/C++ и библиотеки C++; Библиотека шаблонных классов; Статьи; Основы ATL COM-объектов; Создание статистического выражения

наследование, переопределение kbATL210 kbATL300 kbctrl kbserver

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 173823 — последний просмотр: 12/04/2015 17:50:47 — редакция: 4.0

Microsoft ActiveX Template Library 3.0

  • kbnosurvey kbarchive kbarchitecture kbhowto kbmt KB173823 KbMtru
Отзывы и предложения