ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

Отношения между 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);

}



Содержание раздела