Ошибка Automation. Пустой ID объекта? - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка Automation. Пустой ID объекта?

Ошибка Automation. Пустой ID объекта?

Ответ
Поиск в этой теме
Непрочитано 14.02.2024, 09:35
Ошибка Automation. Пустой ID объекта?
prajdziswet
 
Регистрация: 30.03.2015
Сообщений: 153

получаю набор блоков и прохожусь по им, на стороке (на определенной итерации):
Код:
[Выделить все]
 (setq obj (vlax-ename->vla-object list_block))
где list_block -это имя (ssname)

вываливается ошибка "Ошибка Automation. Пустой ID объекта", причем вываливается на команде присвоения "setq obj", в чем может быть дело:
Нажмите на изображение для увеличения
Название: Clip2net_240214090437.jpeg
Просмотров: 29
Размер:	152.4 Кб
ID:	261558
какую доп. проверку можно сделать?, имя не nill и команда "vlax-ename" тоже не нилл =(

после проверки автокада на ошибки изчезает...//выполнять проверку до работы лиспа или можно как то проверить эту ошибку?


Последний раз редактировалось prajdziswet, 14.02.2024 в 09:49.
Просмотров: 1804
 
Непрочитано 14.02.2024, 15:06
#21
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Да, но ТС нужно обеспечить стабильность кода на
"непонятно каких, возможно - испорченных" файлах.

Поэтому и нужны эти странные проверки.

В моих кодах такие проверки - штатная ситуация.
Обожаю, когда удаётся отловить подобный глюк. :-)
Зато всё и работает, как часики...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 15:16
#22
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Проход 1: проверено объектов: 11300
Проверка объектов, проход 2

Проход 2: проверено объектов: 100
AcDbBlockReference(16319B) BTR Id invalid
AcDbBlockReference(16319C) BTR Id invalid
AcDbBlockReference(1753FF) BTR Id invalid
AcDbBlockReference(187670) BTR Id invalid
AcDbBlockReference(188173) BTR Id invalid
AcDbBlockReference(19A3D6) BTR Id invalid
Проход 2: проверено объектов: 11300

Проверка блоков Проверено блоков: 75

Проверка AcDsRecords
Всего найдено ошибок: 6, исправлено: 0

Стерто 0 объектов

----- добавлено через 40 сек. -----
это результат проверки файла из поста №6
ACAD2021, после очистки от прокси и зарегистрированных приложений никаких ошибок не обнаружил.
---
Наврал. Сработало что-то из автозагружаемого (не тот профиль запустил). При чистом ACAD2021 ошибки обнаруживаются.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 14.02.2024 в 15:25.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.02.2024, 15:27
#23
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


А nanoCAD 23.1 на первом же блоке ругнулся:

Команда: 22

22 - 22
0
"\n00000"
#<Имя примитива: 000002607A358EE0>
((-1 . #<Имя примитива: 000002607A358EE0>) (0 . "INSERT") (5 . "16319B") (330 . #<Имя примитива: 000002607A3515A0>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (48 . 100.0) (370 . 20) (100 . "AcDbBlockReference") (2 . "") (10 395714.0 -1.50688e+006 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 1) (71 . 1) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
#<VLA-OBJECT IAcadBlockReference 0000026037243980>
"\n11111"
Отладочный режим:
Сервер ActiveX (TeighaX) вернул ошибку: Null object Id: <object> (0)

Но здесь надо смотреть, как там (vla-get-effectivename ... )
работает - не проверял ещё.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.02.2024, 15:29
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Как вариант, мне на НК проверять лениво:
Код:
[Выделить все]
 (setq res nil
      err nil
)
(foreach ent (mapcar
               (function vlax-ename->vla-object)
               ((lambda (selset / tab item)
                  (repeat (setq tab  nil
                                item (sslength selset)
                          ) ;_ end setq
                    (setq tab (cons (ssname selset (setq item (1- item))) tab))
                  )
                )
                 (ssget "_X" '((0 . "INSERT")))
               )
             )
  (if (vl-catch-all-error-p
        (setq name (vl-catch-all-apply
                     (function
                       (lambda ()
                         (vla-get-effectivename ent)
                       )
                     )
                   )
        )
      )
    (setq err (cons (vla-get-handle ent) err))
    (setq res (cons (cons name ent) res))
  )
)
В res будет перечень точечных пар "Имя" - Указатель, в err - список ошибочных хендлов

----- добавлено через ~2 мин. -----
Вариантов можно накидать тьму. Вот еще один:
Код:
[Выделить все]
 (setq correct_block_ref_list
       (vl-remove-if-not
         (function entget)
         ((lambda (selset / tab item)
            (repeat (setq tab  nil
                          item (sslength selset)
                    ) ;_ end setq
              (setq tab (cons (ssname selset (setq item (1- item))) tab))
            )
          )
           (ssget "_X" '((0 . "INSERT")))
         )
       )
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.02.2024, 16:44
#25
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 153


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
НК
боюсь спросить что за НК

Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
А nanoCAD 23.1 на первом же блоке ругнулся
я нанокаду даж не доверяю, половина команд не отрабатывает (даж простая ssget, специфичная)...

Насчет проверки, я писал - "после проверки и испавления самим автокадом отрабатыла"

Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Да, но ТС нужно обеспечить стабильность кода на
"непонятно каких, возможно - испорченных" файлах.
согласен на 100%
- такие случае и интересны, что неизвестно где выстрелит
____________________________________
Спасибо всем.

п.с если время на выходных будет, попробую покопаться - если что отпишусь....
prajdziswet вне форума  
 
Непрочитано 14.02.2024, 16:53
#26
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Offtop: НК = НаноКад
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.02.2024, 07:36
#27
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 153


Спасибо,

посмотрел для интереса ID=2249273019232 и handle=19A3D6, думал что то интересное будет, остается:
1) запускать проверку автокада, перед кодом
2) или vl-catch-all-error перед этой строкой

вот и думаю, что лучше (у каждого свои плюсы и минусы)
prajdziswet вне форума  
 
Непрочитано 15.02.2024, 07:43
1 | 1 #28
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


На мой взгляд, лучше - при обнаружении подобной ситуации (нашли "nil")
уйти в аудит, после аудита снова сделать проверку.

Если всё ОК - продолжить код, если нет - дать пользователю информационное
сообщение.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 15.02.2024, 08:22
#29
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 153


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
На мой взгляд, лучше - при обнаружении подобной ситуации (нашли "nil")
уйти в аудит, после аудита снова сделать проверку.

Если всё ОК - продолжить код, если нет - дать пользователю информационное
сообщение.
логично, разумно =>
1) единственное нил-а нету, а на ошибку vl-catch-all-error
2) организовывать отдельно проверку кодом, как то тож не совсем красиво => наверное после окончания всех операций (данной) проинформировать пользователя, что были ошибки и попросить провести проверку и исправления (аудит) автокадом и при необходимости повторить программу

п.с еще несколько интересных свойств сбойного объекта:
vlax-read-enabled-p=T (читается)
vlax-object-released-p=nil (не освобожден)
vlax-typeinfo-available-p=T (присутствует в используемой библиотеке типов)
vlax-dump-object = на данном объекте схлопывается автокад(закрывает), начинает читать и схлопывается
prajdziswet вне форума  
 
Непрочитано 15.02.2024, 09:23
1 | #30
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
1) единственное нил-а нету, а на ошибку vl-catch-all-error
Да почему же? Я ведь специально в примере привёл строку,
которая возвратит "nil", наличие которого нужно проверить.

Т.е.:

(if (entget list_block)
(всё хорошо)
(уходим в аудит)
)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 15.02.2024, 09:29
#31
prajdziswet


 
Регистрация: 30.03.2015
Сообщений: 153


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Я ведь специально в примере привёл строку
извеняюсь, из-за невнимательности упустил -спасибо
prajdziswet вне форума  
 
Непрочитано 15.02.2024, 09:30
1 | 1 #32
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Я обычно /если есть такая возможность/ стараюсь вообще
в обработку ошибок не входить, т.к. предполагаю, что в
дальнейшем этот "кусок кода" будет использован в пакетной
обработке файлов.

А там нужен "полный автомат" с логированием в отдельный
файл наиболее интересных событий. И да - вьюер с этим
файлом открывается пред светлые очи пользователя
по завершению работы.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 15.02.2024, 10:19
#33
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


===AAA===, с какого перепугу обработчик ошибок и ObjectDBX не совсем дружат?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.02.2024, 10:55
#34
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 616


Цитата:
с какого перепугу обработчик ошибок и ObjectDBX не совсем дружат?
Я такого, не говорил. :-)

Речь о том, что я придерживаюсь стиля написания кода "если есть возможность
не выходить в обработчик ошибок, то лучше туда не выходить". Понять, что
случилось и обработать ситуацию самому. Наверное, это "устаревший стиль",
но - как есть.

И - таки да - не всегда оное получается и приходится использовать
(vl-catch-all-error-p ...). Но не часто. :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка Automation. Пустой ID объекта?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему возникает ошибка "Нет объекта опирающегося на сваю"? САПФИР 2021. OSPV Лира / Лира-САПР 3 03.02.2022 08:14
Текущий ремонт, капитальный ремонт, техническое обслуживание. Через сколько лет наступает после сдачи объекта? Red_line Архитектура 12 12.09.2018 14:52
При выделении объекта в Автокаде стала выпадать ошибка см. скриншот dextron3 AutoCAD 3 27.01.2013 15:53
Ошибка при удлинении объекта r0nan AutoCAD 2 18.09.2010 21:51
Получение разрешения на строительство объекта капитального строительства maxummm Прочее. Архитектура и строительство 18 25.08.2010 20:31