Точки останова в пользовательской форме не обрабатываются при отладке .NET

Автор Тема: Точки останова в пользовательской форме не обрабатываются при отладке .NET  (Прочитано 11870 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Попробовал, помогает. Но перестала работать не лента, а подгрузка файла MNL для моего CUIX.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Странно. Что-то в командной строке пишет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Ничего странного не пишет.
Немного больше информации:
AutoCAD Civil 3D 2014 x64. У меня сделан свой CUIX в котором дополнительная вкладка ленты. Рядом с этим CUIX находится одноименный файл MNL, в котором прописана загрузка моих DLL и FAS файлов. После того, как я отключил фиберы, загрузка этих файлов не происходит и мои команды не подгружаются в Civil. При этом, стандартные кнопки ленты работают без проблем. Если вручную через NETLOAD загрузить мои DLL, то мои команды начинают работать.
Также, при отключенных фиберах при каждом запуске Civil "слетает" системная переменная FILEDIA (становится = 0).
Если отключить фиберы, закрыть все чертежи и попробовать открыть любой чертеж (не завершая текущего сеанса), то Civil вылетает с фатальной ошибкой.
Может это такая особенность Civil 3D? Или особенность 2014 версии?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
в котором прописана загрузка моих DLL и FAS файлов
DLL-файлы грузятся командой _NETLOAD?

Также, при отключенных фиберах при каждом запуске Civil "слетает" системная переменная FILEDIA (становится = 0).
А ты случайно в MNL-файле не сбрасываешь её в 0? Даже временно?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
По-моему, если в AutoCAD "подсунуть" конструкцию типа
(command "_.netload" "<Полный путь к dll по правилам lisp>")то менять filedia не понадобится. Мне так кажется...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Только вот я не уверен, что в этом контексте работает команда _NETLOAD (когда нет фиберов). Фибер (fiber) - это специально сформированная задача (thread). Microsoft в последние годы от этой технологии отказывается и при наличии фиберов плохо работает отладчик VS.
« Последнее редактирование: 15-01-2014, 01:10:11 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
DLL-файлы грузятся командой _NETLOAD?
Да, верно.
А ты случайно в MNL-файле не сбрасываешь её в 0? Даже временно?
Вы провидец :) Да, ставлю в 0 перед NETLOAD'ами, возвращаю в исходное значение после.
Провел тест - поставил в начале лиспов вывод сообщения об их загрузке. Загрузка выполняется ровно до того момента, пока не доходит до первого вызова NETLOAD. Затем загрузка прерывается без всяких сообщений об ошибках. Код после вызова NETLOAD полностью игнорируется.
А вручную с помощью NETLOAD загружается без проблем.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
1. "Обернуть" загрузку .NET-сборок в обработчик ошибок
2. Я написал в #6, что не надо обнулять filedia.
Пример:
(setq file "c:\\test\\test.dll")
(if (setq err (vl-catch-all-apply
                (function
                  (lambda ()
                    (command "_.netload" file)
                    ) ;_ end of lambda
                  ) ;_ end of function
                ) ;_ end of vl-catch-all-apply
          ) ;_ end of setq
  (princ (strcat "\nError loading .NET-assembly : " (vl-catch-all-error-p err)))
  ) ;_ end of if
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Да, обработка FILEDIA лишняя, отключил. Спасибо!
Можно и обернуть, конечно. Но не уверен, что ошибка будет возникать. А даже если и будет, загружаться сборки все равно не станут, так что от этого не легче :(.
В общем, ошибку в форме отловил, включил обратно фиберы и все ок.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Я бы все же оставил "обертку". Мало ли...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы провидец
А ты не догадывался?  :)
DLL-файлы грузятся командой _NETLOAD?
Да, верно.
Это вторая проблема. Я бы сделал arx-файл специально для загрузки DLL-файлов, ну и других действий, которые средствами AutoCAD .NET API сделать сложно или даже невозможно:
Как загрузить из неуправляемого arx-приложения управляемую .NET сборку в AutoCAD?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Чтобы не запускать AutoCAD только для того, чтобы изменить значение NEXTFIBERWORLD, можно сделать это в реестре. Пример пути к ней:
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R19.1\ACAD-D000:419\Profiles\<<C3D_Russia>>\General Configuration\NEXTFIBERWORLD

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Чтобы не запускать AutoCAD только для того, чтобы изменить значение NEXTFIBERWORLD, можно сделать это в реестре.
AutoCAD много чего хранит в реестре, и NEXTFIBERWORLD в этом не исключение. Однако нужно помнить одну важную деталь: при завершении сеанса своей работы AutoCAD перезаписывает некоторые свои настройки в реестре, не зависимо от того, были ли они им изменены в ходе его работы или нет. Т.о. править настройки AutoCAD, хранящиеся в реестре, следует при выключенном AutoCAD, иначе твои изменения могут быть затёрты по завершению работы приложения. Попадает ли NEXTFIBERWORLD в категорию перезаписываемых переменных - я не проверял, но при желании это можно сделать и самостоятельно.