Compartir a través de


Función CoTreatAsClass (objbase.h)

Establece o quita una emulación, en la que los objetos de una clase se tratan como objetos de una clase diferente.

Sintaxis

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

Parámetros

[in] clsidOld

CLSID del objeto que se va a emular.

[in] clsidNew

CLSID del objeto que debe emular el objeto original. Esto reemplaza cualquier emulación existente para clsidOld. Este parámetro puede ser CLSID_NULL, en cuyo caso se quita cualquier emulación existente para clsidOld .

Valor devuelto

Esta función puede devolver los valores devueltos estándar E_INVALIDARG, así como los valores siguientes.

Código devuelto Descripción
S_OK
La emulación se estableció o quitó correctamente.
REGDB_E_CLASSNOTREG
El parámetro clsidOld no está registrado correctamente en la base de datos de registro.
REGDB_E_READREGDB
Error al leer de la base de datos de registro.
REGDB_E_WRITEREGDB
Error al escribir en la base de datos de registro.

Comentarios

Esta función establece la entrada TreatAs en el Registro para el objeto especificado, lo que permite que otra aplicación emule el objeto. La emulación permite que una aplicación abra y edite un objeto de un formato diferente, a la vez que conserva el formato original del objeto. Una vez establecida esta entrada, cada vez que cualquier función como CoGetClassObject especifica el CLSID original del objeto (clsidOld), se reenvía de forma transparente al nuevo CLSID (clsidNew), iniciando así la aplicación asociada con el CLSID treatAs . Cuando se guarda el objeto, se puede guardar en su formato nativo, lo que puede provocar la pérdida de ediciones no admitidas por el formato original.

Si la aplicación admite la emulación, llame a CoTreatAsClass en las situaciones siguientes:

  • En respuesta a una solicitud de usuario final (mediante un cuadro de diálogo de conversión) que un objeto especificado se trata como un objeto de una clase diferente (un objeto creado bajo una aplicación se ejecuta en otra aplicación, al tiempo que conserva la información de formato original).
  • En un programa de instalación, para registrar que una clase de objetos se trate como objetos de otra clase.
Un ejemplo del primer caso es que un usuario final podría querer editar una hoja de cálculo creada por una aplicación mediante una aplicación diferente que pueda leer y escribir el formato de hoja de cálculo de la aplicación original. Para una aplicación que admite la emulación, se puede llamar a CoTreatAsClass para implementar una opción Tratar como en un cuadro de diálogo de conversión.

Un ejemplo del uso de CoTreatAsClass en un programa de instalación sería en una versión actualizada de una aplicación. Cuando se actualiza la aplicación, los objetos creados con la versión anterior se pueden activar y tratar como objetos de la nueva versión, a la vez que se conserva la información de formato anterior. Esto le permitiría dar al usuario la opción de convertir al guardarlo o guardarlo en el formato anterior, posiblemente perdiendo información de formato no disponible en la versión anterior.

Un resultado de establecer una emulación es que, al enumerar verbos, como en la implementación del método IOleObject::EnumVerbs en el controlador predeterminado, esto enumeraría los verbos de clsidNew en lugar de clsidOld.

Para asegurarse de que la información de emulación existente se quita al instalar una aplicación, los programas de instalación deben llamar a CoTreatAsClass, estableciendo el parámetro clsidNew en CLSID_NULL para quitar cualquier emulación existente para las clases que instalen.

Si no hay ningún CLSID asignado a la clave AutoTreatAs en el Registro, al establecer clsidNew y clsidOld en el mismo valor se quita la entrada TreatAs , por lo que no hay emulación. Si hay un CLSID asignado a la clave AutoTreatAs , ese CLSID se asigna a la clave TreatAs .

CoTreatAsClass no valida si existe actualmente una entrada del Registro adecuada para clsidNew.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado objbase.h
Library Ole32.lib
Archivo DLL Ole32.dll

Consulte también

CoGetTreatAsClass