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 |
---|---|
|
Die Emulation wurde erfolgreich eingerichtet oder entfernt. |
|
Der clsidOld-Parameter ist in der Registrierungsdatenbank nicht ordnungsgemäß registriert. |
|
Fehler beim Lesen aus der Registrierungsdatenbank. |
|
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 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 |