AcAxOleLinkManager is used to manage the link from the database-resident object to its COM object. This is done by attaching a transient reactor to the AcDbObject. The transient reactor has one variable containing a pointer to the IUnknown of the COM object. This transient reactor is also used to call IAcadBaseObject::OnModified() when the AcDbObject is modified.
AutoCAD maintains a single instance of AcAxOleLinkManager in each session. To get a pointer to the OLE link manager, use the AcAxGetOleLinkManager() function. The AcAxOleLinkManager class, which is declared in the oleaprot.h file, is described below:
// AcAxOleLinkManager is used to maintain the link between ARX
// objects and their respective COM wrapper.
//
class AcAxOleLinkManager
{
public:
// Given a pointer to a database-resident object, return
// the IUnknown of the COM wrapper. NULL is returned if
// no wrapper is found.
//
virtual IUnknown* GetIUnknown(AcDbObject* pObject) = 0;
// Set the link between a database-resident object and a
// COM wrapper. If the IUnknown is NULL, then the link
// is removed.
//
virtual Adesk::Boolean SetIUnknown(AcDbObject* pObject,
IUnknown* pUnknown) = 0;
// Given a pointer to a database object, return
// the IUnknown of the COM wrapper. NULL is returned if
// no wrapper is found.
//
virtual IUnknown* GetIUnknown(AcDbDatabase* pDatabase) = 0;
// Set the link between a database object and a COM wrapper.
// If the IUnknown is NULL, then the link is removed.
//
virtual Adesk::Boolean SetIUnknown(AcDbDatabase* pDatabase,
IUnknown* pUnknown) = 0;
// Given a pointer to a database object, return the
// IDispatch of the document object. NULL is returned if
// the database does not belong to a particular document.
//
virtual IDispatch* GetDocIDispatch(AcDbDatabase* pDatabase)= 0;
// Set the link between a database object and the IDispatch
// of the document it belongs to. If the IDispatch is NULL, then
// the link is removed.
//
virtual Adesk::Boolean SetDocIDispatch(AcDbDatabase* pDatabase,
IDispatch* pDispatch) = 0;
};