Funzione CoTreatAsClass (objbase.h)
Stabilisce o rimuove un'emulazione, in cui gli oggetti di una classe vengono trattati come oggetti di una classe diversa.
Sintassi
HRESULT CoTreatAsClass(
[in] REFCLSID clsidOld,
[in] REFCLSID clsidNew
);
Parametri
[in] clsidOld
CLSID dell'oggetto da emulare.
[in] clsidNew
CLSID dell'oggetto che deve emulare l'oggetto originale. Questo sostituisce qualsiasi emulazione esistente per clsidOld. Questo parametro può essere CLSID_NULL, in tal caso viene rimosso qualsiasi emulazione esistente per clsidOld .
Valore restituito
Questa funzione può restituire i valori restituiti standard E_INVALIDARG, nonché i valori seguenti.
Codice restituito | Descrizione |
---|---|
|
L'emulazione è stata stabilita o rimossa correttamente. |
|
Il parametro clsidOld non è registrato correttamente nel database di registrazione. |
|
Errore di lettura dal database di registrazione. |
|
Errore di scrittura nel database di registrazione. |
Commenti
Questa funzione imposta la voce TreatAs nel Registro di sistema per l'oggetto specificato, consentendo all'oggetto di essere emulato da un'altra applicazione. L'emulazione consente a un'applicazione di aprire e modificare un oggetto di un formato diverso, mantenendo il formato originale dell'oggetto. Dopo aver impostato questa voce, ogni volta che qualsiasi funzione come CoGetClassObject specifica il CLSID originale dell'oggetto (clsidOld), viene inoltrato in modo trasparente al nuovo CLSID (clsidNew), avviando così l'applicazione associata a TreatAs CLSID. Quando l'oggetto viene salvato, può essere salvato nel formato nativo, che può causare la perdita di modifiche non supportate dal formato originale.
Se l'applicazione supporta l'emulazione, chiamare CoTreatAsClass nelle situazioni seguenti:
- In risposta a una richiesta dell'utente finale (tramite una finestra di dialogo di conversione) che un oggetto specificato viene considerato come oggetto di una classe diversa (un oggetto creato in un'applicazione viene eseguito in un'altra applicazione, mantenendo le informazioni di formato originali).
- In un programma di installazione, per registrare che una classe di oggetti venga considerata come oggetti di una classe diversa.
Un esempio dell'uso di CoTreatAsClass in un programma di installazione sarebbe in una versione aggiornata di un'applicazione. Quando l'applicazione viene aggiornata, gli oggetti creati con la versione precedente possono essere attivati e trattati come oggetti della nuova versione, mantenendo le informazioni sul formato precedente. In questo modo è possibile concedere all'utente l'opzione per la conversione quando salvano o per salvarla nel formato precedente, perdendo le informazioni di formato non disponibili nella versione precedente.
Un risultato dell'impostazione di un'emulazione è che quando si enumera i verbi, come nell'implementazione del metodo IOleObject::EnumVerbs nel gestore predefinito, questo enumererebbe i verbi da clsidNew anziché clsidOld.
Per assicurarsi che le informazioni sull'emulazione esistenti vengano rimosse quando si installa un'applicazione, i programmi di installazione devono chiamare CoTreatAsClass, impostando il parametro clsidNew su CLSID_NULL per rimuovere qualsiasi emulazione esistente per le classi installate.
Se non è assegnato CLSID alla chiave AutoTreatAs nel Registro di sistema, l'impostazione di clsidNew e clsidOld sullo stesso valore rimuove la voce TreatAs, quindi non esiste alcuna emulazione. Se è assegnato un CLSID alla chiave AutoTreatAs , clSID viene assegnato alla chiave TreatAs .
CoTreatAsClass non convalida se esiste una voce del Registro di sistema appropriata per clsidNew.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | objbase.h |
Libreria | Ole32.lib |
DLL | Ole32.dll |