Condividi tramite


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
S_OK
L'emulazione è stata stabilita o rimossa correttamente.
REGDB_E_CLASSNOTREG
Il parametro clsidOld non è registrato correttamente nel database di registrazione.
REGDB_E_READREGDB
Errore di lettura dal database di registrazione.
REGDB_E_WRITEREGDB
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 del primo caso è che un utente finale potrebbe voler modificare un foglio di calcolo creato da un'applicazione diversa che può leggere e scrivere il formato foglio di calcolo dell'applicazione originale. Per un'applicazione che supporta l'emulazione, è possibile chiamare CoTreatAsClass per implementare un'opzione Tratta come in una finestra di dialogo di conversione.

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

Vedi anche

CoGetTreatAsClass