Registers an object and its identifying moniker in the Running Object Table
| DWORD grfFlags,
||//Specifies a weak or a strong reference
| IUnknown *punkObject,
||//Pointer to the object being registered
| IMoniker *pmkObjectName,
||//Moniker that identifies the object being registered
| DWORD *pdwRegister
||//Receives value identifying the registration
[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.
[in] Points to the object that is being registered as running.
[in] Points to the moniker that identifies punkObject
[out] Receives a 32-bit value that can be used to identify this ROT entry in
subsequent calls to IRunningObjectTable::Revoke
. The caller cannot specify NULL for this parameter. If an error occurs, *pdwRegister
is set to zero.
Indicates that the object was successfully registered.
Indicates that the moniker/object pair was successfully registered, but that
another object (possibly the same object) has already been registered with the
Indicates one or more invalid arguments.
Indicates failure due to insufficient memory.
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
because even duplicate entries have different pdwRegister
identifiers. A problem with duplicate registrations is that there is no way
to determine which object will be returned if the moniker is specified in a
subsequent call to IRunningObjectTable::IsRunning
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
You must cache the identifier returned in pdwRegister
, and use it in a call to IRunningObjectTable::Revoke
to revoke the registration when the object is no longer running or when its
moniker changes. This revocation is important because there is no way for the
system to automatically remove entries from the ROT.
The system's implementation of IRunningObjectTable::Register
on the pmkObjectName
parameter to ensure that the moniker is fully reduced before registration. If
a object is known by more than one fully reduced moniker, then it should be
registered under all such monikers.
- Software for developers
Software for Android Developers
- More information resources
Unix Manual Pages