Отношения между AcDbObjects и Объектами Автоматизации
AutoCAD осуществляет его модель объекта ActiveX Automation, создавая связь между объектом резидента базы (AcDbObject) и объектом COM, который представляет это. Эта связь составлена из с двух одним направленным указателей. Первый указатель - IUNKNOWN объекта COM, который сохранен, используя переходный реактор на AcDbObject. Второй указатель - AcDbObjectId объекта резидента базы, который сохранен как поле на объекте COM.
Эта связь позволяет Вам отыскивать существующий указатель IUnknown данного объекта COM указатель AcDbObject, как показано в следующем коде:
AcAxOleLinkManager* pOleLinkManager = AcAxGetOleLinkManager();
// pObject is an AcDbObject*
//
IUnknown* pUnk = pOleLinkManager->GetIUnknown(pObject);
// NOTE: AcAxOleLinkManager::GetIUnknown() does not AddRef()
// the IUnknown pointer.
Наоборот, Вы можете отыскивать AcDbObjectId объекта резидента базы, представляемого данным объектом COM указатель IUnknown, как показано в следующем коде:
IAcadBaseObject* pAcadBaseObject = NULL;
// pUnk is the IUnknown* of a COM object representing
// some object in the database
//
HRESULT hr = pUnk->QueryInterface(IID_IAcadBaseObject, (LPVOID*) &pAcadBaseObject);
AcDbObjectId objId;
if(SUCCEEDED(hr))
{
pAcadBaseObject->GetObjectId(&objId);
}