Here it is an ARX approach:
static void GetEntityPreviousFrom(void)
{
ads_name eName;
ads_point pt;
if (RTNORM != acedEntSel(_T("\nSelect from entity: "), eName, pt)) return;
AcDbObjectId id;
acdbGetObjectId(id, eName);
AcDbObjectPointer<AcDbEntity> pObj(id, AcDb::kForRead);
if (pObj.openStatus() != Acad::eOk) return;
AcDbBlockTableRecordPointer pBTR(acdbCurDwg()->currentSpaceId(), AcDb::kForRead);
if (pBTR.openStatus() != Acad::eOk) return;
AcDbBlockTableRecordIterator* pIterator = NULL;
if (pBTR->newIterator(pIterator) != Acad::eOk) return;
AcDbEntity* pEnt = NULL;
if (pIterator->seek(pObj) == Acad::eOk)
{
pIterator->step(false, true);
AcDbObjectId objId;
pIterator->getEntityId(objId);
AcDbObjectPointer<AcDbEntity> pEnt(objId, AcDb::kForRead);
if (pEnt.openStatus() == Acad::eOk) pEnt->highlight();
}
delete pIterator;
}
In case someone wants to tested the command is MyCommand - attached it is a debug version for AutoCAD 2014 only.