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

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 14-03-2014, 12:32:50

Название: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Андрей Бушман от 14-03-2014, 12:32:50
Доброго времени суток.

Если процесс acad.exe создавать программно, то ему через аргументы можно передать набор дополнительных ключей: нужный профиль AutoCAD, нужный шаблон для нового документа и т.д. и т.п.

Можно ли это как-то сделать в случае использования COM? Т.е. что-то похожее на это:
Код - C# [Выбрать]
  1. String[] appArgs = new String[] { @"\p", @"C:\GPSM\AdminCAD\Common\Profiles\GPSM 4.2.1.arg",
  2. @"\t", @"C:\GPSM\AdminCAD\Common\Templates\DWT\Формы по ГОСТ 21.1101-2009.dwt"};
  3. app = System.Activator.CreateInstance(type, appArgs); // AcadApplication
Я понимаю, что можно сначала программно создать Process, передав ему нужный набор аргументов и затем подключиться к нему через COM. Однако можно ли это сделать напрямую при создании объекта AcadApplication средствами COM?

Спасибо.
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Александр Ривилис от 14-03-2014, 14:38:29
Однако можно ли это сделать напрямую при создании объекта AcadApplication средствами COM?
Увы, но таких средств нет. Максимум из того, что ты можешь сделать при помощи только средств COM - это после создания, пользуясь методами объекта поменять профиль и т.д. Кстати, я считаю что запуск при помощи Process более правильный - ты таким образом точно знаешь какая версия AutoCAD будет запущена.
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Андрей Бушман от 14-03-2014, 15:11:14
ты таким образом точно знаешь какая версия AutoCAD будет запущена.
Сам проверить не могу, поэтому уточняю: а если создавать объект приложения не при помощи строкового представления ProgID:
Код - C# [Выбрать]
  1. System.Type.GetTypeFromProgID(strId);
а через CLSID:
Код - C# [Выбрать]
  1. type = System.Type.GetTypeFromCLSID(guid);
В этом случае всё равно не факт что запустится именно та, которая нужна?
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Александр Ривилис от 14-03-2014, 15:22:47
В этом случае всё равно не факт что запустится именно та, которая нужна?
Абсолютно не факт.
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Андрей Бушман от 14-03-2014, 15:28:15
Тогда возникает риторический вопрос: нахрена тогда эти  CLSID нужны, при таком раскладе?
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Александр Ривилис от 14-03-2014, 15:30:48
Тогда возникает риторический вопрос
Ну раз риторический, то отвечать нет смысла. :-) Видимо считается, что у пользователя установлена только одна версия AutoCAD, что для пользователя (а не программиста) правильно.
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Андрей Бушман от 14-03-2014, 15:51:18
Видимо считается, что у пользователя установлена только одна версия AutoCAD, что для пользователя (а не программиста) правильно.
Т.е. это не проблема COM в целом, а лишь кривая реализация от Autodesk?
Название: Re: AcadApplication: передача параметров, аналогичных аргументам acad.exe
Отправлено: Александр Ривилис от 14-03-2014, 16:23:22
Т.е. это не проблема COM в целом, а лишь кривая реализация от Autodesk?
Ты уже в теме смешал два вопроса. Если говорить о передаче параметров в COM - то это особенность COM. Кстати COM реализуется обычно через DLL, который в принципе слыхом не слыхивал ни про какие параметры командной строки.
Если говорить про неопределенность вызова через COM AutoCAD - тут я могу с тобой согласится процентов на 90.