v2017. Не исполняется DLL на целевом компьютере

Автор Тема: v2017. Не исполняется DLL на целевом компьютере  (Прочитано 7074 раз)

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

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
может быть дело в их взаимодействии?
Запросто. Поэтому я и написал, что вариантов много. Начни с отладочной печати.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А как отловить этот метод Initialize, сори, если это очень просто..
Его не нужно отлавливать. Он просто у тебя должен быть. Должен быть класс, который реализует интерфейс IExtensionApplication, у которого методы Initialize и Terminate. Тебя должен сейчас интересовать только метод Initialize.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 384
  • Карма: 21
3. "Initialize" - такого метода у меня нет
Ты в этом уверен?
Это метод интерфейса IExtensionApplication.Initialize(), который вызвается при загрузке dll-файла по NETLOAD
Может человек весь свой проект запилил на [CommandMethod...]?
PS Хотя очень странная тема.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Может человек весь свой проект запилил на [CommandMethod...]?
Теоретически это возможно. Но тогда непонятно как отловить причину, по которой эта dll-ка некорректно грузится (или не грузится) в AutoCAD.
Вполне возможно, что если она связана с другими dll-файлами (native или managed) и не находит их, то сообщений никаких не возникает, но сборка не грузится и не работает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Юрий КузнецовАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Может человек весь свой проект запилил на [CommandMethod...]?
PS Хотя очень странная тема.
Скорее всего именно так.. хотя и не осознанно.. а как лучшие практики советуют?

Оффлайн Юрий КузнецовАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Интерфейс IExtensionApplication не использовал (даже не знал о его существовании). Осознал..

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Интерфейс IExtensionApplication не использовал (даже не знал о его существовании). Осознал..
Кстати, в Initialize() ты можешь загрузить нужные тебе сборки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Юрий КузнецовАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Кстати, в Initialize() ты можешь загрузить нужные тебе сборки.
Ок, синкс

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
На целевой машине dll грузится (NETLOAD - не ругается), но ее команды не выполняются - "неизвестная команда".
На своей - все как часы. OS & AutoCAD - полностью идентичны.
Я бы для начала убедился, что на целевой машине действительно всё ок. Для этого написал бы самый простой командный "хелловорд" и проверил бы, что он грузится и выполняется.
И ещё стоит проверить на третьей машине проблемную dll. Если запустится, то проблема может быть совсем не в dll.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
1. Явное копирование DLL в корень акадовской папки
Зачем такое варварство? Советую таким не злоупотреблять. Не надо делать склад из сторонних приложений и их вспомогательных библиотек в системных папках AutoCAD. Лучше cделать отдельную папку для "довесков", типа C:\AcadSupport (или на другом диске, если их несколько в системе), прописать эту папку и вложенные в неё как доверенные в настройках AutoCAD и класть различные загружаемые вручную приложения туда. Можно ещё делать подпапки, типа LISP, Net и т.п.

Оффлайн Юрий КузнецовАвтор темы

  • ADN OPEN
  • Сообщений: 11
  • Карма: 0
Зачем такое варварство? Советую таким не злоупотреблять. Не надо делать склад из сторонних приложений и их вспомогательных библиотек в системных папках AutoCAD. Лучше cделать отдельную папку для "довесков", типа C:\AcadSupport (или на другом диске, если их несколько в системе), прописать эту папку и вложенные в неё как доверенные в настройках AutoCAD и класть различные загружаемые вручную приложения туда. Можно ещё делать подпапки, типа LISP, Net и т.п.
Так и сделал уже, синкс. Добавил Initialize. Перекомпилял в Realise и.. все заработало!!!.. на трех машинах потестил.. и на всех заработало!!! Спасибо, мужики!!!


Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 384
  • Карма: 21
Может человек весь свой проект запилил на [CommandMethod...]?
PS Хотя очень странная тема.
Скорее всего именно так.. хотя и не осознанно.. а как лучшие практики советуют?
В своём САПРе я делал так. Все .dll лежат в .bundle. Есть общая .dll, которая потом грузит остальные .dll. Во всех .dll (лично в моём проекте) реализуется интерфейс IExtensionApplication: общая .dll грузит другие .dll, а те в свою очередь инициализируют свои ленты и грузят команды через Utils.AddCommand (но это необязательно, можно просто через [CommandMethod]).