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


Функция 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