Partager via


CoTreatAsClass, fonction (objbase.h)

Établit ou supprime une émulation, dans laquelle les objets d’une classe sont traités comme des objets d’une autre classe.

Syntaxe

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

Paramètres

[in] clsidOld

CLSID de l’objet à émuler.

[in] clsidNew

CLSID de l’objet qui doit émuler l’objet d’origine. Cela remplace toute émulation existante pour clsidOld. Ce paramètre peut être CLSID_NULL, auquel cas toute émulation existante pour clsidOld est supprimée.

Valeur retournée

Cette fonction peut retourner les valeurs de retour standard E_INVALIDARG, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
L’émulation a été établie ou supprimée.
REGDB_E_CLASSNOTREG
Le paramètre clsidOld n’est pas correctement inscrit dans la base de données d’inscription.
REGDB_E_READREGDB
Erreur de lecture à partir de la base de données d’inscription.
REGDB_E_WRITEREGDB
Erreur d’écriture dans la base de données d’inscription.

Remarques

Cette fonction définit l’entrée TreatAs dans le Registre pour l’objet spécifié, ce qui permet à l’objet d’être émulé par une autre application. L’émulation permet à une application d’ouvrir et de modifier un objet d’un autre format, tout en conservant le format d’origine de l’objet. Une fois cette entrée définie, chaque fois qu’une fonction telle que CoGetClassObject spécifie le CLSID (clsidOld) d’origine de l’objet, elle est transférée de manière transparente vers le nouveau CLSID (clsidNew), lançant ainsi l’application associée au CLSID TreatAs . Lorsque l’objet est enregistré, il peut être enregistré dans son format natif, ce qui peut entraîner la perte de modifications non prises en charge par le format d’origine.

Si votre application prend en charge l’émulation, appelez CoTreatAsClass dans les situations suivantes :

  • En réponse à une demande de l’utilisateur final (via une boîte de dialogue de conversion), un objet spécifié doit être traité comme un objet d’une autre classe (un objet créé sous une application doit être exécuté sous une autre application, tout en conservant les informations de format d’origine).
  • Dans un programme d’installation, pour inscrire qu’une classe d’objets soit traitée comme des objets d’une autre classe.
Un exemple de premier cas est qu’un utilisateur final peut souhaiter modifier une feuille de calcul créée par une application à l’aide d’une autre application qui peut lire et écrire le format de feuille de calcul de l’application d’origine. Pour une application qui prend en charge l’émulation, CoTreatAsClass peut être appelé pour implémenter une option Traiter comme dans une boîte de dialogue de conversion.

Un exemple d’utilisation de CoTreatAsClass dans un programme d’installation serait dans une version mise à jour d’une application. Lorsque l’application est mise à jour, les objets créés avec la version antérieure peuvent être activés et traités comme des objets de la nouvelle version, tout en conservant les informations de format précédentes. Cela vous permet de donner à l’utilisateur la possibilité de convertir lors de l’enregistrement, ou de l’enregistrer dans le format précédent, ce qui peut entraîner la perte d’informations de format non disponibles dans l’ancienne version.

L’un des résultats de la définition d’une émulation est que lorsque vous énumérez des verbes, comme dans l’implémentation de la méthode IOleObject ::EnumVerbs dans le gestionnaire par défaut, cela énumère les verbes de clsidNew au lieu de clsidOld.

Pour vous assurer que les informations d’émulation existantes sont supprimées lorsque vous installez une application, vos programmes d’installation doivent appeler CoTreatAsClass, en définissant le paramètre clsidNew sur CLSID_NULL pour supprimer toute émulation existante pour les classes qu’ils installent.

Si aucun CLSID n’est affecté à la clé AutoTreatAs dans le Registre, la définition de clsidNew et clsidOld sur la même valeur supprime l’entrée TreatAs , de sorte qu’il n’y a pas d’émulation. Si un CLSID est affecté à la clé AutoTreatAs , ce CLSID est affecté à la clé TreatAs .

CoTreatAsClass ne vérifie pas si une entrée de Registre appropriée pour clsidNew existe actuellement.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête objbase.h
Bibliothèque Ole32.lib
DLL Ole32.dll

Voir aussi

CoGetTreatAsClass