Функция CoTreatAsClass (objbase.h)
Устанавливает или удаляет эмуляцию, в которой объекты одного класса обрабатываются как объекты другого класса.
Синтаксис
HRESULT CoTreatAsClass(
[in] REFCLSID clsidOld,
[in] REFCLSID clsidNew
);
Параметры
[in] clsidOld
ИДЕНТИФИКАТОР CLSID эмулируемого объекта.
[in] clsidNew
ИДЕНТИФИКАТОР CLSID объекта, который должен эмулировать исходный объект. Это заменяет все существующие эмуляции для clsidOld. Этот параметр можно CLSID_NULL, и в этом случае удаляется любая существующая эмуляция для clsidOld .
Возвращаемое значение
Эта функция может возвращать стандартные возвращаемые значения E_INVALIDARG, а также следующие значения.
Код возврата | Описание |
---|---|
|
Эмуляция успешно установлена или удалена. |
|
Параметр clsidOld неправильно зарегистрирован в базе данных регистрации. |
|
Ошибка при чтении из базы данных регистрации. |
|
Ошибка записи в базу данных регистрации. |
Комментарии
Эта функция задает запись TreatAs в реестре для указанного объекта, позволяя эмулировать объект другим приложением. Эмуляция позволяет приложению открывать и редактировать объект другого формата, сохраняя при этом исходный формат объекта. После установки этой записи, когда какая-либо функция, например CoGetClassObject , задает исходный ИДЕНТИФИКАТОР CLSID объекта (clsidOld), она прозрачно перенаправляется в новый ИДЕНТИФИКАТОР CLSID (clsidNew), тем самым запуская приложение, связанное с CLSID TreatAs . При сохранении объекта его можно сохранить в собственном формате, что может привести к потере изменений, не поддерживаемых исходным форматом.
Если приложение поддерживает эмуляцию, вызовите CoTreatAsClass в следующих ситуациях:
- В ответ на запрос конечного пользователя (через диалоговое окно преобразования), что указанный объект рассматривается как объект другого класса (объект, созданный в одном приложении, запускается в другом приложении, сохраняя при этом исходные сведения о формате).
- В программе установки необходимо зарегистрировать, что один класс объектов будет рассматриваться как объекты другого класса.
Пример использования CoTreatAsClass в программе установки может быть в обновленной версии приложения. При обновлении приложения объекты, созданные в более ранней версии, можно активировать и рассматривать как объекты новой версии, сохраняя при этом предыдущие сведения о формате. Это позволит пользователю выполнить преобразование при сохранении или сохранить его в предыдущем формате, что может привести к потере сведений о формате, недоступных в более старой версии.
Одним из результатов настройки эмуляции является то, что при перечислении глаголов, как в реализации метода IOleObject::EnumVerbs в обработчике по умолчанию, будет перечисление глаголов из clsidNew вместо clsidOld.
Чтобы гарантировать удаление существующих сведений об эмуляции при установке приложения, программы установки должны вызвать CoTreatAsClass, задав параметру clsidNew значение CLSID_NULL удалить все существующие эмуляции для устанавливаемых классов.
Если в реестре нет идентификатора CLSID, назначенного разделу AutoTreatAs , присвоить параметру clsidNew и clsidOld одно и то же значение, запись TreatAs удаляется, поэтому эмуляция отсутствует. Если ключу AutoTreatAs назначен clSID, этот ИДЕНТИФИКАТОР CLSID назначается ключу TreatAs .
CoTreatAsClass не проверяет, существует ли соответствующая запись реестра для clsidNew.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | objbase.h |
Библиотека | Ole32.lib |
DLL | Ole32.dll |