IRunningObjectTable::Register
Registers an
object and its identifying moniker in the Running Object Table (ROT).
HRESULT Register(
DWORD grfFlags, |
//Specifies
a weak or a strong reference |
IUnknown *punkObject, |
//Pointer to
the object being registered |
IMoniker *pmkObjectName, |
//Pointer to
the moniker of the object being registered |
DWORD *pdwRegister |
//Pointer to
the value identifying the registration |
); |
|
Parameters
grfFlags
[in]
Specifies whether the ROT s reference to punkObject is weak or strong.
This value must be either zero, indicating a weak reference that does not call IUnknown::AddRef ; or
ROTFLAGS_REGISTRATIONKEEPSALIVE, indicating a strong reference that calls IUnknown::AddRef
and can keep the object running. If a strong reference is registered, a strong
reference is released when the object s
registration is revoked. Most callers specify zero, indicating a weak
reference.
punkObject
[in] Pointer
to the object that is being registered as running.
pmkObjectName
[in] Pointer
to the moniker that identifies punkObject.
pdwRegister
[out] Pointer
to a 32-bit value that can be used to identify this ROT entry in subsequent
calls to IRunningObjectTable::Revoke
Return Values
This method
supports the standard return values E_INVALIDARG and E_OUTOFMEMORY, as well as
the following:
S_OK
The object
was successfully registered.
MK_S_MONIKERALREADYREGISTERED
The
moniker/object pair was successfully registered, but that another object
(possibly the same object) has already been registered with the same moniker.
Remarks
This method
registers a pointer to an object under a moniker that identifies the object.
The moniker is used as the key when the table is searched with IRunningObjectTable::GetObject
Registering a
second object with the same moniker, or re-registering the same object with the
same moniker, creates a second entry in the ROT. In this case, IRunningObjectTable::Register
returns MK_S_MONIKERALREADYREGISTERED. Each call to IRunningObjectTable::Register
must be matched by a call to IRunningObjectTable::Revoke
Notes to Callers
If you re a moniker provider (that is, you hand out monikers
identifying your objects to make them accessible to others), you must call the IRunningObjectTable::Register
method to register your objects when they begin running. You must also call
this method if you rename your objects while they are loaded.
The most
common type of moniker provider is a compound-document link source. This
includes server applications that support linking to their documents (or
portions of a document) and container applications that support linking to
embeddings within their documents. Server applications that do not support
linking can also use the ROT to cooperate with container applications that
support linking to embeddings.
If you re writing a server application, you should register
an object with the ROT when it begins running, typically in your implementation
of IOleObject::DoVerb. The object must be registered under its full
moniker, which requires getting the moniker of its container document using IOleClientSite::GetMoniker.
You should also revoke and re-register the object in your implementation of IOleObject::SetMoniker,
which is called if the container document is renamed.
If you re writing a container application that supports
linking to embeddings, you should register your document with the ROT when it
is loaded. If your document is renamed, you should revoke and re-register it
with the ROT and call IOleObject::SetMoniker for any embedded objects in
the document to give them an opportunity to re-register themselves.
You must
cache the identifier returned in pdwRegister, and use it in a call to IRunningObjectTable::Revoke
The system s implementation of IRunningObjectTable::Register
calls IMoniker::Reduce
See Also