Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Борис_С от 01-03-2021, 18:26:13

Название: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 01-03-2021, 18:26:13
Всем доброго дня!
У меня такой вопрос: можно ли в консольном приложении работать с AutoCad как com-объектом.
Дело в том, что на операторе dynamic acad = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication; возникает исключение
System.InvalidProgramException: 'Среда выполнения Common Language Runtime обнаружила недопустимую программу.'
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 01-03-2021, 19:34:31
У меня такой вопрос: можно ли в консольном приложении работать с AutoCad как com-объектом.
Нельзя. Я же уже ответил в другой теме.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 01-03-2021, 19:52:25
А в каком приложении можно работать с AutoCad как com-объектом?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 01-03-2021, 19:53:16
А в каком приложении можно работать с AutoCad как com-объектом?
Только в самом AutoCAD.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 01-03-2021, 19:57:26
Это значит, что первое, что нужно сделать - запустить AutoCad. Так?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 01-03-2021, 20:02:20
Наверное, я не точно сформулировал вопрос.
Какой тип приложения нужно использовать, чтобы обратиться к AutoCad как com-объекту?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 01-03-2021, 20:02:58
Это значит, что первое, что нужно сделать - запустить AutoCad. Так?
Это значит, что если ты работаешь с AcCoreConsole - забудь про COM/ActiveX и ищи способы как работать без них.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 02-03-2021, 15:47:31
Мое начальство мне объяснило, что работать с AutoCad нужно как с com-объектом. Другие варианты неприемлемы.
Дело в том, что задача оказалась несколько иной, чем это представлялось мне изначально.
Нужно сделать универсальное приложение, которое вытаскивает тексты из файлов различных форматов.
Шаблон этого приложения уже сделан. Он ориентирован на работу с сом-объектами.

Поэтому вопросы остаются:
Какой тип приложения нужно использовать, чтобы обратиться к AutoCad как com-объекту?
Нужно ли предварительно запустить AutoCad?



Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 02-03-2021, 16:59:50
Нужно ли предварительно запустить AutoCad?
В этом случае accoreconsole вообще не нужно и не подходит. Если речь идёт про COM/ActiveX, то всё должно работать внутри AutoCAD. Или если вы готовы платить за RealDWG - то это тоже вариант.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 02-03-2021, 17:05:32
Какой тип приложения нужно использовать, чтобы обратиться к AutoCad как com-объекту?
Нужно ли предварительно запустить AutoCad?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 02-03-2021, 17:06:49
Борис_С,
Ты собираешься управлять им из своего приложения?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 02-03-2021, 17:08:03
Да
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 02-03-2021, 17:13:54
Да
Сочувствую. Это самый худший из возможных вариантов, так как управление AutoCAD через COM/ActiveX очень проблематичное.
Поищи по форуму AcadApplication. Найдёшь примеры.
 
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 02-03-2021, 17:17:17
Это я уже искал. Саша, все те же вопросы:
Какой тип приложения нужно использовать, чтобы обратиться к AutoCad как com-объекту?
Можно использовать Class Library?
Нужно ли предварительно запустить AutoCad?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 02-03-2021, 17:22:08
Какой тип приложения нужно использовать, чтобы обратиться к AutoCad как com-объекту?
Это совершенно неважно. Если ты создашь Class Library, то её нужно куда-то грузить (это же dll-файл).
Предварительно запускать AutoCAD необязательно. Ну и учти, что если будет запущено > 1 AutoCAD, то ты не сможешь с ним работать через COM/ActiveX.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 02-03-2021, 17:24:48
Почитай: https://adn-cis.org/forum/index.php?topic=606.0
И это: https://adn-cis.org/forum/index.php?topic=7364.0
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 11-03-2021, 18:33:44
Написал такой код для загрузки файла чертежа:
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.ApplicationServices;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.Runtime;
  7.  
  8. namespace PackageNormaAuditApp
  9. {
  10.     public class DwgParser:IParser
  11.     {
  12.         public override bool OpenFile(string filePath)
  13.         {
  14.             string localFile;
  15.             try
  16.             {
  17.                 dynamic app = Application.AcadApplication;
  18.                 app.ActiveDocument.Utility.GetRemoteFile(filePath, out localFile, true);
  19.                 return true;
  20.             }
  21.             catch (System.Exception e)
  22.             {
  23.                 Logger.Log("Ошибка открытия файла: " + e.Message, ILogger.Severities.Error);
  24.                 string message = String.Format("Ошибка открытия файла \"{0}\". {1}\n{2}\n{3}",
  25.                     filePath, e.Message, e.StackTrace.TrimStart(), Environment.NewLine.Trim());
  26.                 Logger.Log(message, ILogger.Severities.Error);
  27.                 return false;
  28.             };
  29.         }
  30.     }
  31. }
На операторе dynamic app = Application.AcadApplication; получаю исключение: "Среда выполнения Common Language Runtime обнаружила недопустимую программу."
Проект - Class Library.
Где я не прав?
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 11-03-2021, 18:38:26
Написал такой код для загрузки файла чертежа:
Загружается в AutoCAD или в AcCoreConsole? Если второе, то и не должно работать, о чем я сразу сказал.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 11-03-2021, 18:40:06
Загружаю в AutoCAD.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 12-03-2021, 01:28:33
Загружаю в AutoCAD.
Возможно в проекте используется не та версия .NET Framework.
Вторая возможная причина - проблема с инсталляцией AutoCAD.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 12-03-2021, 17:55:24
Есть такая гипотеза. У меня есть работающий проект (плагин), в котором есть тот же оператор
dynamic app = Application.AcadApplication;
Там он прекрасно работает. Отличие в одном. Там изначально запускается AutoCAD.
Поэтому есть объект AcadApplication.
Здесь же AutoCAD не запущен, поэтому AcadApplication пуст.
Наверно, его нужно как-то создать.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 12-03-2021, 21:43:24
Здесь же AutoCAD не запущен, поэтому AcadApplication пуст.
Как не запущен, если ты пишешь, что "Загружаю в AutoCAD"??? Если он загружен в AutoCAD, то AutoCAD уже запущен. А если не запущен, то ты не можешь пользоваться сборками AutoCAD .NET API из него. Мы это уже повторяли многократно...
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Борис_С от 13-03-2021, 13:05:48
Предварительно запускать AutoCAD необязательно.
Саша, это твои слова, или я что-то не понял.
Название: Re: Можно ли в консольном приложении работать с AutoCad как com-объектом
Отправлено: Александр Ривилис от 13-03-2021, 13:49:49
Предварительно запускать AutoCAD необязательно.
Саша, это твои слова, или я что-то не понял.
Не понял вообще ничего. И сбил меня с толку. Я уже не понимаю с чем ты хочешь работать и как.
Эта тема называется "Можно ли в консольном приложении работать с AutoCad как com-объектом". Ответ я дал сразу  - НЕТ! Больше в этой теме ничего не должно было быть. Если есть другие вопросы - создавай новую тему и формулируй четко вопросы.