CoTreatAsClass
Establishes
or removes an emulation, in which objects of one class are treated as objects
of a different class.
STDAPI CoTreatAsClass(
REFCLSID clsidOld, |
//CLSID for the original object to be emulated |
REFCLSID clsidNew |
//CLSID for the new object that emulates the
original |
); |
|
Parameters
clsidOld
[in] CLSID of
the object to be emulated.
clsidNew
[in] CLSID of
the object that should emulate the original object. This replaces any existing
emulation for clsidOld. Can be CLSID_NULL, in which case any existing
emulation for clsidOld is removed.
Return Values
This function
supports the standard return value E_INVALIDARG, as well as the following:
S_OK
The emulation
was successfully established or removed.
REGDB_E_CLASSNOTREG
The clsidOld
parameter is not properly registered in the registration database.
REGDB_E_READREGDB
Error reading
from registration database.
REGDB_E_WRITEREGDB
Error writing
to registration database.
Remarks
This function
sets the TreatAs entry in the registry for the specified object,
allowing the object to be emulated by another application. Emulation allows an
application to open and edit an object of a different format, while retaining
the original format of the object. After this entry is set, whenever any
function like CoGetClassObject
You would
call CoTreatAsClass in two situations if your application supports
emulation:
In response to an end-user
request (through a conversion dialog box) that a specified object be treated as
an object of a different class (an object created under one application be run
under another application, while retaining the original format information).
In a setup program, to register
that one class of objects be treated as objects of a different class.
An example of
the first case is that an end user might wish to edit a spreadsheet created by
one application using a different application that can read and write the
spreadsheet format of the original application. For an application that
supports emulation, CoTreatAsClass can be called to implement a Treat As
option in a conversion dialog box.
An example of
the use of CoTreatAsClass in a setup program would be in an updated
version of an application. When the application is updated, the objects created
with the earlier version can be activated and treated as objects of the new
version, while retaining the previous format information. This would allow you
to give the user the option to convert when they save, or to save it in the
previous format, possibly losing format information not available in the older
version.
One result of
setting an emulation is that when you enumerate verbs, as in the IOleObject::EnumVerbs
method implementation in the default handler, this would enumerate the verbs
from clsidNew instead of clsidOld.
To ensure
that existing emulation information is removed when you install an application,
your setup programs should call CoTreatAsClass, setting the clsidNew
parameter to CLSID_NULL to remove any existing emulation for the classes they
install.
If there is
no CLSID assigned to the AutoTreatAs key in the registry, setting clsidNew
and clsidOld to the same value removes the TreatAs entry, so
there is no emulation. If there is a CLSID assigned to the AutoTreatAs
key, that CLSID is assigned to the TreatAs key.
The CoTreatAsClass
function does not validate whether an appropriate registry entry for clsidNew
currently exists.
See Also