Freigeben über


CoTreatAsClass-Funktion (objbase.h)

Erstellt oder entfernt eine Emulation, bei der Objekte einer Klasse als Objekte einer anderen Klasse behandelt werden.

Syntax

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

Parameter

[in] clsidOld

Die CLSID des zu emulierenden Objekts.

[in] clsidNew

Die CLSID des Objekts, das das ursprüngliche Objekt emulieren soll. Dadurch wird jede vorhandene Emulation für clsidOld ersetzt. Dieser Parameter kann CLSID_NULL werden. In diesem Fall wird jede vorhandene Emulation für clsidOld entfernt.

Rückgabewert

Diese Funktion kann die standardmäßigen Rückgabewerte E_INVALIDARG sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Emulation wurde erfolgreich eingerichtet oder entfernt.
REGDB_E_CLASSNOTREG
Der clsidOld-Parameter ist in der Registrierungsdatenbank nicht ordnungsgemäß registriert.
REGDB_E_READREGDB
Fehler beim Lesen aus der Registrierungsdatenbank.
REGDB_E_WRITEREGDB
Fehler beim Schreiben in die Registrierungsdatenbank.

Hinweise

Diese Funktion legt den TreatAs-Eintrag in der Registrierung für das angegebene Objekt fest, sodass das Objekt von einer anderen Anwendung emuliert werden kann. Die Emulation ermöglicht es einer Anwendung, ein Objekt eines anderen Formats zu öffnen und zu bearbeiten, während das ursprüngliche Format des Objekts beibehalten wird. Nach dem Festlegen dieses Eintrags wird jedes Mal, wenn eine Funktion wie CoGetClassObject die ursprüngliche CLSID (clsidOld) des Objekts angibt, transparent an die neue CLSID (clsidNew) weitergeleitet, wodurch die Anwendung gestartet wird, die der TreatAs CLSID zugeordnet ist. Wenn das Objekt gespeichert wird, kann es im nativen Format gespeichert werden, was zu einem Verlust von Bearbeitungen führen kann, die vom ursprünglichen Format nicht unterstützt werden.

Wenn Ihre Anwendung Emulation unterstützt, rufen Sie In den folgenden Situationen CoTreatAsClass auf:

  • Als Reaktion auf eine Endbenutzeranforderung (über ein Konvertierungsdialogfeld), dass ein angegebenes Objekt als Objekt einer anderen Klasse behandelt wird (ein Objekt, das unter einer Anwendung erstellt wurde, wird unter einer anderen Anwendung ausgeführt, wobei die ursprünglichen Formatinformationen beibehalten werden).
  • Um in einem Setupprogramm zu registrieren, dass eine Klasse von Objekten als Objekte einer anderen Klasse behandelt wird.
Ein Beispiel für den ersten Fall ist, dass ein Endbenutzer möglicherweise eine von einer Anwendung erstellte Kalkulationstabelle mit einer anderen Anwendung bearbeiten möchte, die das Tabellenkalkulationsformat der ursprünglichen Anwendung lesen und schreiben kann. Für eine Anwendung, die Emulation unterstützt, kann CoTreatAsClass aufgerufen werden, um eine Option "Treat As " in einem Konvertierungsdialogfeld zu implementieren.

Ein Beispiel für die Verwendung von CoTreatAsClass in einem Setupprogramm wäre eine aktualisierte Version einer Anwendung. Wenn die Anwendung aktualisiert wird, können die objekte, die mit der früheren Version erstellt wurden, aktiviert und als Objekte der neuen Version behandelt werden, wobei die vorherigen Formatinformationen beibehalten werden. Auf diese Weise können Sie dem Benutzer die Möglichkeit geben, beim Speichern zu konvertieren oder im vorherigen Format zu speichern, wodurch möglicherweise Formatinformationen verloren gehen, die in der älteren Version nicht verfügbar sind.

Ein Ergebnis des Festlegens einer Emulation ist, dass beim Aufzählen von Verben wie in der Implementierung der IOleObject::EnumVerbs-Methode im Standardhandler die Verben aus clsidNew anstelle von clsidOld aufgezählt werden.

Um sicherzustellen, dass vorhandene Emulationsinformationen bei der Installation einer Anwendung entfernt werden, sollten Ihre Setupprogramme CoTreatAsClass aufrufen und den Parameter clsidNew auf CLSID_NULL festlegen, um vorhandene Emulationen für die von ihnen installierten Klassen zu entfernen.

Wenn dem AutoTreatAs-Schlüssel in der Registrierung keine CLSID zugewiesen ist, wird durch Festlegen von clsidNew und clsidOld auf den gleichen Wert der Eintrag TreatAs entfernt, sodass keine Emulation vorhanden ist. Wenn dem AutoTreatAs-Schlüssel eine CLSID zugewiesen ist, wird diese CLSID dem TreatAs-Schlüssel zugewiesen.

CoTreatAsClass überprüft nicht, ob derzeit ein geeigneter Registrierungseintrag für clsidNew vorhanden ist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile objbase.h
Bibliothek Ole32.lib
DLL Ole32.dll

Weitere Informationen

CoGetTreatAsClass