Сообщество программистов Autodesk в СНГ
ADN Club => ObjectARX => Тема начата: lom0v от 26-03-2019, 02:32:59
-
Ситуация: есть AcDbObjectIdArray с id-ами объектов. Есть подозрение, что какие-то объекты не были вовремя закрыты.
Можно ли как-то проверить, что объект не закрыт только по id объекта?
Можно ли по id объекта выяснить в каком режиме (чтение/запись/уведомление) он открыт?
Как закрыть объект, если на него нет указателя? (Если объект открыт в kForNotify, то повторно его открыть, что бы получить указатель, через acdbOpenAcDbObject() не получится.)
Что делает метод AcDbObjectId::isResident()? Пробовал использовать его, но с состоянием открыт/закрыт как-то не коррелирует.
В документации только скупая строчка:
This function returns true if the object associated with this objectId is resident in memory.
-
Можно ли как-то проверить, что объект не закрыт только по id объекта?
Нет. Поэтому пользуйся интелектуальными указателями, чтобы быть уверенным что объект будет вовремя закрыт.
-
Спасибо.
пользуйся интелектуальными указателями, чтобы быть уверенным что объект будет вовремя закрыт.
А если это должно работать под транзакцией?
AcDbObjectPointerBase использует acdbOpenObject() для открытия объекта и close() в деструкторе, точнее в AcDbObjectPointerBase<T_OBJECT>::closeInternal(), для закрытия объекта. А под транзакциями это не пройдёт.
-
А если это должно работать под транзакцией?
А без транзакции никак?
-
А без транзакции никак?
Никак.
Это уже есть. Этого уже много. И на это я повлиять никак не могу.
-
Никак.
Это уже есть. Этого уже много. И на это я повлиять никак не могу.
Могу лишь посочувствовать.
-
А если это должно работать под транзакцией?
Если объект открыт в транзакции, то AcDbTransactionManager::getAllObjects должен вернуть и его.