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


Функция CoTreatAsClass (objbase.h)

Устанавливает или удаляет эмуляцию, в которой объекты одного класса обрабатываются как объекты другого класса.

Синтаксис

HRESULT CoTreatAsClass(
  [in] REFCLSID clsidOld,
  [in] REFCLSID clsidNew
);

Параметры

[in] clsidOld

ИДЕНТИФИКАТОР CLSID эмулируемого объекта.

[in] clsidNew

ИДЕНТИФИКАТОР CLSID объекта, который должен эмулировать исходный объект. Это заменяет все существующие эмуляции для clsidOld. Этот параметр можно CLSID_NULL, и в этом случае удаляется любая существующая эмуляция для clsidOld .

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

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

Код возврата Описание
S_OK
Эмуляция успешно установлена или удалена.
REGDB_E_CLASSNOTREG
Параметр clsidOld неправильно зарегистрирован в базе данных регистрации.
REGDB_E_READREGDB
Ошибка при чтении из базы данных регистрации.
REGDB_E_WRITEREGDB
Ошибка записи в базу данных регистрации.

Комментарии

Эта функция задает запись TreatAs в реестре для указанного объекта, позволяя эмулировать объект другим приложением. Эмуляция позволяет приложению открывать и редактировать объект другого формата, сохраняя при этом исходный формат объекта. После установки этой записи, когда какая-либо функция, например CoGetClassObject , задает исходный ИДЕНТИФИКАТОР CLSID объекта (clsidOld), она прозрачно перенаправляется в новый ИДЕНТИФИКАТОР CLSID (clsidNew), тем самым запуская приложение, связанное с CLSID TreatAs . При сохранении объекта его можно сохранить в собственном формате, что может привести к потере изменений, не поддерживаемых исходным форматом.

Если приложение поддерживает эмуляцию, вызовите CoTreatAsClass в следующих ситуациях:

  • В ответ на запрос конечного пользователя (через диалоговое окно преобразования), что указанный объект рассматривается как объект другого класса (объект, созданный в одном приложении, запускается в другом приложении, сохраняя при этом исходные сведения о формате).
  • В программе установки необходимо зарегистрировать, что один класс объектов будет рассматриваться как объекты другого класса.
В первом случае пользователю может потребоваться изменить электронную таблицу, созданную одним приложением, с помощью другого приложения, которое может читать и записывать формат электронной таблицы исходного приложения. Для приложения, поддерживающего эмуляцию, можно вызвать CoTreatAsClass , чтобы реализовать параметр Treat As в диалоговом окне преобразования.

Пример использования 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

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

CoGetTreatAsClass