Прочитать на английском

Поделиться через


Функция DllGetClassObject (combaseapi.h)

Извлекает объект класса из обработчика или приложения объекта DLL.

OLE не предоставляет эту функцию. Библиотеки DLL, поддерживающие объектную модель КОМПОНЕНТОВ OLE (COM), должны реализовывать DllGetClassObject в обработчиках объектов OLE или в приложениях DLL.

Синтаксис

HRESULT DllGetClassObject(
  [in]  REFCLSID rclsid,
  [in]  REFIID   riid,
  [out] LPVOID   *ppv
);

Параметры

[in] rclsid

ИДЕНТИФИКАТОР CLSID, который свяжет правильные данные и код.

[in] riid

Ссылка на идентификатор интерфейса, который вызывающий объект будет использовать для взаимодействия с объектом класса. Обычно это IID_IClassFactory (определяется в заголовках OLE как идентификатор интерфейса для IClassFactory).

[out] ppv

Адрес переменной указателя, которая получает указатель интерфейса, запрошенный в riid. После успешного возврата *ppv содержит запрошенный указатель интерфейса. При возникновении ошибки указатель интерфейса имеет значение NULL.

Возвращаемое значение

Эта функция может возвращать стандартные возвращаемые значения E_INVALIDARG, E_OUTOFMEMORY и E_UNEXPECTED, а также следующие значения.

Код возврата Описание
S_OK
Объект был успешно получен.
CLASS_E_CLASSNOTAVAILABLE
Библиотека DLL не поддерживает класс (определение объекта).

Комментарии

Если вызов функции CoGetClassObject находит объект класса, который должен быть загружен в библиотеку DLL, CoGetClassObject использует экспортированную функцию DLL DllGetClassObject .

Примечания к вызывающим абонентам

Не следует вызывать DllGetClassObject напрямую. Если объект определен в библиотеке DLL, CoGetClassObject вызывает функцию CoLoadLibrary для загрузки библиотеки DLL, которая, в свою очередь, вызывает DllGetClassObject.

Примечания для разработчиков

Необходимо реализовать DllGetClassObject в библиотеках DLL , поддерживающих COM, и экспортировать его из.

Примеры

Ниже приведен пример (на C++) реализации DllGetClassObject. В этом примере DllGetClassObject создает объект класса и вызывает его метод QueryInterface для получения указателя на интерфейс, запрошенный в riid. Реализация освобождает ссылку на интерфейс IClassFactory , так как возвращает вызывающему объекту указатель на IClassFactory .

HRESULT _export CALLBACK DllGetClassObject 
    (REFCLSID rclsid, REFIID riid, LPVOID * ppvObj) 
{ 
    HRESULT hr = E_OUTOFMEMORY; 
    *ppvObj = NULL; 
 
    CClassFactory *pClassFactory = new CClassFactory(rclsid); 
    if (pClassFactory != NULL)   { 
        hr = pClassFactory->QueryInterface(riid, ppvObj); 
        pClassFactory->Release(); 
    } 
    return hr;
} 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header combaseapi.h (включая Objbase.h)

См. также раздел

CoGetClassObject

DllCanUnloadNow