Проблема получением COM объекта AcadApplication

Автор Тема: Проблема получением COM объекта AcadApplication  (Прочитано 6209 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Очень странная проблема:
Использую код Александра Ривилиса, который он написал в этом сообщении - http://adn-cis.org/forum/index.php?topic=7835.msg26484#msg26484.
  • Сначала подключил библиотеки AutoCAD 2016 Type Library, запустил в автокаде 2016. Все работает.
  • Пробую запустить в автокаде 2017 (точнее это был Civil3D). Свойство Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication возвращает null
  • Меняю библиотеки на AutoCAD 2017 Type Library. Теперь все работает в автокаде 2017
  • Опять поменял библиотеки на 2016 версию, и запускаю в автокаде 2016. Не работает - Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication возвращает null
  • Пытаюсь запустить опять в 2017 - работает с обеими версиями библиотек
Кто-нибудь с таким сталкивался? Почему так происходит?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Так ведь это же COM. Если используются ссылки на COM библиотеки, то надо компилировать практически под каждую версию и под каждую разрядность отдельную сборку. Используйте тип dynamic без добавления COM-ссылок.

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Спасибо, Дмитрий.
Основная проблема была в том, что я не мог заставить код работать в автокаде 2016 при подключенных библиотеках для 2016 версии - AutoCAD 2016 Type Library.
Я сейчас подгрузил библиотеку Autodesk.AutoCAD.Interop из ObjectARX SDK и эта проблема отпала.

Очень интересно то, что вы говорите. Буду разбираться с dynamic. Раньше не использовал.


Отмечено как Решение Кирилл Захаров 08-06-2017, 18:51:16

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Там, собственно, разбираться не с чем:
Код - C# [Выбрать]
  1. string localFile;
  2. try
  3. {
  4.     dynamic app = Application.AcadApplication;
  5.     app.ActiveDocument.Utility.GetRemoteFile("http://maestrogroup.com.ua/DEMO/L1.dwg", out localFile, true);
  6. }
  7. catch (System.Exception ex)
  8. {
  9.     Application.ShowAlertDialog(ex.Message);
  10. };
  11.  

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Ну да, и еще библиотеку Microsoft.CSharp компилятор потребовал. Спасибо

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я сейчас подгрузил библиотеку Autodesk.AutoCAD.Interop из ObjectARX SDK и эта проблема отпала.
Временно. Для каждой разрядности AutoCAD (x86/x64) требуется подключать свои Autodesk.AutoCAD.Interop.dll и Autodesk.AutoCAD.Interop.Common.dll
Так что лучше действительно использовать dynamic - он сам определит какая библиотека нужна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Да да да, использовать dynamic - лучшее решение. Вообще огонь. А уж думал, что придется делать несколько версий из-за этого. Хорошо, что поднял эту тему, а то так бы и не узнал. Крутой форум)