Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Обращение в семейству групп меню и последующий вызов диалога _CUI приводят к ошибке.

Обращение в семейству групп меню и последующий вызов диалога _CUI приводят к ошибке.

Ответ
Поиск в этой теме
Непрочитано 04.08.2010, 15:44 #1
Обращение в семейству групп меню и последующий вызов диалога _CUI приводят к ошибке.
Makswell
 
Инженер-строитель
 
Киров
Регистрация: 15.08.2007
Сообщений: 2,204

Здравствуйте.
Есть код.
Код:
[Выделить все]
(defun test (/ lst)
  (vlax-for fam_item (vla-get-MenuGroups (vlax-get-acad-object))
    (setq lst (cons (vla-get-Name fam_item) lst))
  )
  lst
)
Он возвращает список имён групп меню (адаптации).

Так вот, если его выполнить, а потом вызвать диалог "Настройка интерфейса пользователя" (команда _CUI), то появится сообщение: "ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)"

Вот листинг комендной строки.
Запускаю Автокад на новом файле.
Цитата:
Команда: (defun test (/ lst)
(_> (vlax-for fam_item (vla-get-MenuGroups (vlax-get-acad-object))
((_> (setq lst (cons (vla-get-Name fam_item) lst))
((_> )
(_> lst
(_> )
TEST

Команда: (test)
("EXPRESS" "M-CAD" "VETCAD++" "ACAD" "M-CAD_PART")

Команда: _CUI

<<Здесь в диалоговом окне я меняю имя любой кнопки, а потом оставляю старое имя. То есть по-сути ничего не меняю, но в результате этого кнопка "Применить" становится активной. Далее нажимаю "Применть" и "Ок" и ...>>

Файл настройки загружен успешно. Группа настройки: M-CAD
Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: M-CAD_PART
Файл настройки загружен успешно. Группа настройки: VETCAD++
Файл настройки загружен успешно. Группа настройки: EXPRESS


Команда: ; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для исключение
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для исключение
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC00000FD (Стек переполнен)
; предупреждение: раскрутка пропущена для исключение
; ошибка: Возникло исключение: 0xC00000FD (Стек переполнен)
; ошибка: "no applicable method for:" (object-id
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(...
слишком длинное сообщение об ошибке, обрезано
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для исключение
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
В чём может быть косяк?

И ещё, проверьте пожалуйста, так ли у вас происходит? Может это только у меня так?
Только во избежание потери информации ЗАКРОЙТЕ ВСЕ НУЖНЫЕ ВАМ ФАЙЛЫ DWG! Мало ли что.

У меня Автокад 2008, Sp1.
Просмотров: 7849
 
Непрочитано 04.08.2010, 16:00
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Не подтверждаю. У меня на AutoCAD 2008 Eng SP1 такого не происходит. Возможно что-то в одном из mnl-файлов сбоит или реакторы...
Александр Ривилис вне форума  
 
Непрочитано 04.08.2010, 16:00
#3
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Acad 2010 Eng - все ровненько.
Цитата:
Command:
Command: test
Unknown command "TEST". Press F1 for help.

Command: (test)
("EXPRESS" "AUTODESKSEEK" "IMPRESSION" "PLTOOLS" "ACAD" "CUSTOM")

Command: cui

Customization file loaded successfully. Customization Group: ACAD
Customization file loaded successfully. Customization Group: CUSTOM
Customization file loaded successfully. Customization Group: IMPRESSION
Customization file loaded successfully. Customization Group: AUTODESKSEEK
Customization file loaded successfully. Customization Group: EXPRESS
Customization file loaded successfully. Customization Group: PLTOOLS
Do$ вне форума  
 
Автор темы   Непрочитано 04.08.2010, 16:39
#4
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Сбросил профиль и попробовал на девственно чистом Автокаде.
Прокатило.
Цитата:
Команда: (vl-load-com)

Команда: (defun test (/ lst)
(_> (vlax-for fam_item (vla-get-MenuGroups (vlax-get-acad-object))
((_> (setq lst (cons (vla-get-Name fam_item) lst))
((_> )
(_> lst
(_> )
TEST

Команда: (test)
("EXPRESS" "ACAD" "DBCONNECT" "CUSTOM")

Команда: _cui

Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: CUSTOM
Файл настройки загружен успешно. Группа настройки: DBCONNECT
Файл настройки загружен успешно. Группа настройки: EXPRESS
Значит причина видимо в моих наворотах.
Отключил свои реакторы и выгрузил группу меню "VETCAD++".
Стало получше, но тем не менее.
Цитата:
Команда: (defun test (/ lst)
(_> (vlax-for fam_item (vla-get-MenuGroups (vlax-get-acad-object))
((_> (setq lst (cons (vla-get-Name fam_item) lst))
((_> )
(_> lst
(_> )
TEST

Команда: (test)
("EXPRESS" "M-CAD" "ACAD" "M-CAD_PART")

Команда: _cui

Файл настройки загружен успешно. Группа настройки: M-CAD
Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: M-CAD_PART
Файл настройки загружен успешно. Группа настройки: EXPRESS


Команда: ; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для исключение
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
Что б ещё посмотреть? Сейчас вроде всё чисто Автокадовское + только моё, но у меня сейчас отключены реакторы, и ничего особого не происходит (вроде).
Makswell вне форума  
 
Непрочитано 04.08.2010, 16:51
#5
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Ключевое слово - вроде.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 05.08.2010, 10:16
#6
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Сейчас ситуация такая.
Сразу скажу, что у меня система файлов меню сделана по совету ShaggyDoc'a (тема "игры с CUI"). То есть есть основной файл адаптации (полностью пустой), и в него подгружаются частичные файлы адаптации (нетронутый acad.cui и прочие, включая свой собственный).

Сейчас у меня подгружаются как частичные только acad.cui и свой M-Menu2008.cui.

Так вот, если убрать файл M-Menu2008.mnl, то вроде всё проходит нормально.

Но если оставить M-Menu2008.mnl и в нём прописать всего лишь одну строчку (princ), то опять же всё проходит нормально. Но далее, если открыть ide лиспа, и в нём попытаться открыть файл, то он не откроется, а при следующей попытке произойдёт вылет Автокада.

Сейчас-то что не так?

Вот, попытался снять видео этого дела.

Добавлено:
Вроде нашёл кое-что!

Глюк происходит, когда идёт обращение к объекту группы "acad"
То есть:
Цитата:
Команда: (vla-get-Name (vla-Item (vla-get-MenuGroups (vlax-get-acad-object)) 0))
"M-CAD_PART"

Команда: _cui

Файл настройки загружен успешно. Группа настройки: M-CAD_MAIN
Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: M-CAD_PART
Файл настройки загружен успешно. Группа настройки: VETCAD++
Файл настройки загружен успешно. Группа настройки: EXPRESS
И далее:
Цитата:
Команда: (vla-get-Name (vla-Item (vla-get-MenuGroups (vlax-get-acad-object)) 1))
"ACAD"

Команда: _cui

Файл настройки загружен успешно. Группа настройки: M-CAD_MAIN
Файл настройки загружен успешно. Группа настройки: ACAD
Файл настройки загружен успешно. Группа настройки: M-CAD_PART
Файл настройки загружен успешно. Группа настройки: VETCAD++
Файл настройки загружен успешно. Группа настройки: EXPRESS


Команда: ; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; предупреждение: раскрутка пропущена для исключение
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
; ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)
Если во vla-Item подствалять любые числа, кроме 1, то ошибки не будет.

Значит видимо вывод такой, что именно загрузка acad.cui, как частичного приводит к некорректной работе в данной ситуации. Видимо так.

Тогда вопрос конкретно к ShaggyDoc'у. У Вас файлы адаптации организованы так же. Такой эффект наблюдается? И можно с этим как-нибудь бороться?

Offtop: ЗЫ Хочу топикап же!
Вложения
Тип файла: zip Видео.zip (732.7 Кб, 81 просмотров)

Последний раз редактировалось Makswell, 05.08.2010 в 11:19.
Makswell вне форума  
 
Непрочитано 05.08.2010, 16:10
#7
acid


 
Сообщений: n/a


удалил...
 
 
Непрочитано 05.08.2010, 19:29
#8
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Тогда вопрос конкретно к ShaggyDoc'у. У Вас файлы адаптации организованы так же. Такой эффект наблюдается? И можно с этим как-нибудь бороться?
У меня ничего такого не происходит. Версий старше 2008 у меня нет, но ни у кого из пользователей такого не возникало.

Но вот эта ошибка 0xC0000005 возникала, кажется в версии 2005 или 2004 при программной работе с меню. Код проверяли неоднократно, все правильно, но ошибка вылетала. Пришлось отказаться от хорошей идеи.

Подозреваю, что дело все-таки в самом AutoCAD. Внутренние ошибки где-то в dll.

Но зачем вообще делать такие вызовы:
(vla-get-Name (vla-Item (vla-get-MenuGroups (vlax-get-acad-object)) 0))?

Надо дать всем меню загрузиться. На это же время требуется. Объекты могут и не успеть "родиться".

А если уж непременно надо, то обрамляй сомнительный код ловушкой ошибок.

В очередной раз привожу код функции - ловушки.

Код:
[Выделить все]
(defun ru-error-catch
       (protected_expression on_error_expression / catch_error_result)
;|
Пример вызова
(ru-error-catch
    (function (lambda ()
                ;;; защищаемое выражение  
                (
                
                )
                ;;; То что вернет - будет результатом
              ) ;_ end of lambda
    ) ;_ end of function
    (function
      (lambda (err_msg)
        ;; если надо - выводим сообщение. err_msg подставит Автокад
        (princ (strcat "\nОШИБКА такой-то функции: " err_msg))
        ;; возвращаем NIL при ошибке
        nil
      ) ;_ end of lambda
    ) ;_ end of function
  )

|;
  
  (setq catch_error_result
         (vl-catch-all-apply protected_expression)
  ) ;_ end of setq
  (if (and (vl-catch-all-error-p catch_error_result)
           on_error_expression
      ) ;_ end of and
    (apply on_error_expression
           (list (vl-catch-all-error-message catch_error_result))
    ) ;_ end of apply
    catch_error_result
  ) ;_ end of if
)
Если она не поймает ошибку, то причина точно в потрохах у AutoCAD.

И вот здесь сомнение:

Цитата:
Но далее, если открыть ide лиспа, и в нём попытаться открыть файл, то он не откроется, а при следующей попытке произойдёт вылет Автокада.
Зачем IDE и какой файл в ней открывается? MNL? Так незачем его там открывать. Разные приложения по-разному открывают файлы. Некоторые позволяют с открытыми файлами что-то делать, в том числе изменять и сохранять, а некоторые не разрешают. А тут сам Автокад открывает, да ещё DLL, загруженная в него, тоже открывает. Последствия могут быть непредсказуемые.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 06.08.2010, 08:08
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Надо дать всем меню загрузиться. На это же время требуется. Объекты могут и не успеть "родиться".
Удивительно, но если всё, что я делал (например в первом посте и при тех же раскладах), делать медленно и после выполнения функции (test) подождать хотя бы полминуты-минуту (по разному, как показали опыты) до того, как вызвать диалог _CUI, то всё пройдёт нормально и без ошибок.
ShaggyDoc, спасибо. Меня в общем-то данная ситуация устраивает, большего и не нужно.
Makswell вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Обращение в семейству групп меню и последующий вызов диалога _CUI приводят к ошибке.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Попасть в слой. Vova AutoCAD 106 10.03.2006 04:36