Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Func.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.58 Mб
Скачать

CoCreateInstance

STDAPI CoCreateInstance( REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID * ppv );

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

В случае успешного завершения возвращает значение S_OK. В противном случае возвращаемое значение может принимать одно из следующих значений:

  • REGDB_E_CLASSNOTREG — указанный класс не зарегистрирован регистрационной базе данных. Также указывает на то, что тип сервера, затребованный при составлении списка CLSCTX, не зарегистрирован или значения данного сервера в системном реестре некорректны.

  • CLASS_E_NOAGGREGATION — данный класс не может быть создан как часть агрегата.

Аргументы

  1. rclsid — CLSID, связанный с данными и программным кодом, используемым при создании объекта.

  2. pUnkOuter — указатель на агрегированный с объектом интерфейс IUnknown. Если этот аргумент имеет нулевое значение, данный объект не является частью агрегата.

  3. dwClsContext — контекст, который должен использовать программный код, управляющий вновь созданным объектом. Эта величина извлекается из списка CLSCTX.

  4. riid — ссылка на идентификатор интерфейса, используемого для связи с объектом.

  5. ppv — адрес указателя на интерфейс, определённый в аргументе riid.

Примечание

Создаёт неинициализированный объект класса, связанного с указанным CLSID. Вызов функции CoCreateInstance позволяет создать в локальной системе только один объект. Для создания объекта в удалённой системе используется функция CoCreateInstanceEx. Для создания нескольких объектов, использующих один и тот же CLSID, используется функция CoGetClassObject.

Функцию CoCreateInstance можно рассматривать как объединение следующих функций:

CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF);

hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj)

pCF->Release();

Описание данной функции содержится в файле заголовка objbase.h. Данная функция включается как ресурс в библиотеку динамической компоновки ole32.dll.

CoInitialize

HRESULT CoInitialize( LPVOID pvReserved );

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

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

  • S_OK — библиотека COM успешно инициализирована в данном разделе.

  • S_FALSE — библиотека COM уже инициализирована в данном разделе.

  • RPC_E_CHANGED_MODE — предыдущий вызов функции CoInitializeEx определил в качестве согласованной модели для данного раздела модель с множеством потоков.

Аргументы

  1. pvReserved — зарезервирован для дальнейшего использования, должен иметь значение NULL.

Примечание

Инициализирует библиотеки COM в текущем разделе и определяет в качестве согласованной модели для данного раздела модель с одним потоком. Приложение должно инициализировать библиотеку COM прежде, чем оно сможет воспользоваться любой её функцией, кроме функции CoGetMalloc и функций распределения памяти. Новые приложения должны использовать вместо функции CoInitialize функцию CoInitializeEx.

Функция CoInitializeEx выполняет те же операции, что и функция CoInitialize, но содержит дополнительный аргумент, позволяющий определить согласованную модель для данного раздела. Функция CoInitialize вызывает функцию CoInitializeEx и определяет в качестве согласованной модели для данного раздела модель с одним потоком.

Обычно библиотеки COM однократно инициализируется в разделе. Последующие вызовы данной функции будут успешными, если в них не предпринимается попытка изменить согласованную модель, но они будут возвращать значение S_FALSE. Для корректного закрытия библиотеки COM каждому вызову функции CoInitialize или CoInitializeEx, включая те, которые возвращали значение S_FALSE, следует сопоставить вызов функции CoUninitialize.

Однажды установленная согласованную модель раздела не может быть изменена. Вызов функции CoInitialize для раздела, в котором была установлена модель с множеством потоков, приведёт к выдаче сообщения об ошибке RPC_E_CHANGED_MODE.

Описание данной функции содержится в файле заголовка objbase.h. Данная функция включается как ресурс в библиотеку динамической компоновки ole32.dll.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]