2. Буду пробывать вроде в Doc есть метод SendCommand(или Documunt.SendStringToExecute...) - буду разбиратьсяЭто отдельное приложение (внешний exe-файл), или .NET-сборка, которая грузится в AutoCAD? Если внешнее приложение, то Documunt.SendStringToExecute использовать нельзя - только COM.
п.с насчет форматирование кода -учту. СпасибоБыло бы неплохо, если бы ты, перед тем как жать кнопку "Отправить", читал свой текст и исправлял кривую орфографию и пунктуацию. А то уж очень глаза режут...
Мое внешнее приложение должно запускать автокад (когда мне нужно из моего ехе) и давать команды на выполнение лиспа или несколько лиспов (а lisp-файл остальное сам сделает)Если используешь AutoCAD 2013 или более новый, то можешь воспользоваться accoreconsole.exe, дабы не изобретать велосипед.
У меня в коде много на lisp работы с ActiveX (получение объектов и другого,но это надо пробывать).В консольной версии AutoCAD отсутствует COM API.
то Documunt.SendStringToExecute использовать нельзя - только COM.Да перепутал - для COM это SendCommand и не забыть добавить в конец строки \n.
И возможно Documunt.SendStringToExecute подойдет? (пояснение дальше...,если не подойдет подскажите как сделать из com)Не подойдёт именно потому, что:
Мое внешнее приложение должно запускать автокад (когда мне нужно из моего ехе) и давать команды на выполнение лиспа или несколько лиспов (а lisp-файл остальное сам сделает)Из внешнего приложения ты не можешь использовать AutoCAD .NET API (Document - это из него), а можешь использовать только COM (Interop) - это AcadDocument и его метод SendCommand.
Есть еще вариант посложнееЕсть ещё вариант: поместить в автозагрузку .net-расширение, хостящее WCF сервис и, запустив AutoCAD, из любого внешнего приложения можно будет взаимодействовать с этим сервисом (в т.ч. и из др. компьютера). В этом случае для работы в AutoCAD внешнему приложению будут доступны возможности не только те, которые реализованы в COM API и AutoLISP, то так же и те, которые имеются в AutoCAD .NET API.
скорее всего что нет открытых чертежей и он с нуля не может его создать, хоть не логичноВообще, целесообразно всегда проверять текущий документ на равенство null, т.к. с некоторых пор это стало актуально.
SendCommand вызывается синхронно
SendCommand Method (ActiveX)
...
This method is generally synchronous. However, if the command sent with this method requires any user interaction (such as picking a point on the screen) then this method will continue as soon as the user input begins. The command will then continue to be processed asynchronously.
When this method is called from an event handler it is processed asynchronously.
У меня в коде много на lisp работы с ActiveX
SendCommand Method (ActiveX)
...
You should never use this method to issue a command for which there is an ActiveX method available.
У меня в коде много на lisp работы с ActiveX (получение объектов и другого,но это надо пробывать). До этого accoreconsole.exe не пользовался.Попробовал?
Но в приложении столкнулся с ошибкойПо поводу этой ошибки смотри:
1) К сожалению не пробовал (сам тоже читал, что не поддерживает, хоть загрузку команды vl-load-com поддерживает (я про accoreconsole.exe)).Что мешает попробовать? Запустить accoreconsole.exe и указать ему в качестве параметра твой лисп файл - это занимает несколько секунд времени.
Все больше прихожу к мысли, что проще реализовать через свой загрузочник-lisp (он у меня работает со всеми типами lsp,vlx,arx,dll можно сказать что-то "аля" accoreconsole.exe с помещением в автозагрузку или на один раз, с выгрузкой и удалением файлов если надо) => то есть поместить строку выполнения лиспа в текстовый файл не проблема.На мой взгляд, имеет смысл изобретать велосипед, если вариант с accoreconsole.exe у тебя точно не будет работать. Но, как я уже выше писал, нет смысла гадать "годится/не годится" не попробовав то, что было предложено.
п.с2 Андрею лучше не читать, ато снова к грамматическим ошибкам придерется )). - прошу прощенияЭто надо было писать в начале сообщения, а не в конце. :)