Функция 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, а также следующие значения.
Код возврата | Описание |
---|---|
|
Объект был успешно получен. |
|
Библиотека 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) |