86 lines
2.2 KiB
C++
86 lines
2.2 KiB
C++
//+---------------------------------------------------------------------
|
|
//
|
|
// File: rotutils.cxx
|
|
//
|
|
// Contents: Running Object Table helper functions
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
#include "headers.hxx"
|
|
#pragma hdrstop
|
|
|
|
//+---------------------------------------------------------------
|
|
//
|
|
// Function: RegisterAsRunning
|
|
//
|
|
// Synopsis: Registers the object in the Running Object Table
|
|
//
|
|
// Arguments: [lpUnk] -- the object being registered
|
|
// [lpmkFull] -- the full moniker to the object
|
|
// [lpdwRegister] -- where the registration value will be
|
|
// returned.
|
|
//
|
|
// Notes: c.f. RevokeAsRunning
|
|
//
|
|
//----------------------------------------------------------------
|
|
|
|
void
|
|
RegisterAsRunning(LPUNKNOWN lpUnk,
|
|
LPMONIKER lpmkFull,
|
|
DWORD FAR* lpdwRegister)
|
|
{
|
|
LPRUNNINGOBJECTTABLE pROT;
|
|
HRESULT r;
|
|
|
|
if (OK(r = GetRunningObjectTable(0,(LPRUNNINGOBJECTTABLE FAR*)&pROT)))
|
|
{
|
|
// if already registered, revoke
|
|
if (*lpdwRegister != NULL)
|
|
{
|
|
pROT->Revoke(*lpdwRegister);
|
|
*lpdwRegister = NULL;
|
|
}
|
|
|
|
// register as running if a valid moniker is passed
|
|
if (lpmkFull)
|
|
{
|
|
pROT->Register(NULL, lpUnk, lpmkFull, lpdwRegister);
|
|
}
|
|
|
|
pROT->Release();
|
|
}
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------
|
|
//
|
|
// Function: RevokeAsRunning
|
|
//
|
|
// Synopsis: Revokes an objects registration in the Running Object Table
|
|
//
|
|
// Arguments: [lpdwRegister] -- points to where the registration value is
|
|
// for the object. Will be set to NULL.
|
|
//
|
|
// Notes: c.f. RegisterAsRunning
|
|
//
|
|
//----------------------------------------------------------------
|
|
|
|
void
|
|
RevokeAsRunning(DWORD FAR* lpdwRegister)
|
|
{
|
|
LPRUNNINGOBJECTTABLE pROT;
|
|
HRESULT r;
|
|
|
|
// if still registered, then revoke
|
|
if (*lpdwRegister != NULL)
|
|
{
|
|
if (OK(r = GetRunningObjectTable(0,(LPRUNNINGOBJECTTABLE FAR*)&pROT)))
|
|
{
|
|
pROT->Revoke(*lpdwRegister);
|
|
*lpdwRegister = NULL;
|
|
pROT->Release();
|
|
}
|
|
}
|
|
}
|
|
|