Тема: Как получить доступ к запущенному эеземпляру AutoCAD?

Проблема такая:
Пользователь сидит рисует чертеж. В какой то момент запускает приложение дельфовое, которое должно все что юзер перед этим выделил сохранить в необходимом мне формате.
То есть не создать экземпляр акада -а подключиться к открытому. Ну и есл ибудет ответ на этот вопрос, токак поступить если акадов открыто 2-3.

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

для простого случая:
function GetActiveOleObject(const ClassName: string): IDispatch;
а вот когда их несколько.... :(

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

"Приложение дельфовое", которое запускает пользователь, должно быть реализовано в виде COM-сервера. Серверу программа, работающая внутри AutoCAD передает необходимое "задание", оно что-то делает и возвращает результат.
Нет проблем и с несколькими AutoCAD, так же как при обращении к одной DLL из разных приложений.

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

А зачем здесь нужен Delphi?
Если ползователь выделяет фрагмент, то он должен и управлять записью...
Или можно подробнее описать задачу?

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

to ShaggyDoc
мда... что-то я недочитал  :)
если юзер будет из программы чего-то запускать - тогда действительно никаких проблем!
сложности возникают если не из программы...

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

> callisto
А из чего, если не из программы? Ну, пусть не юзер рукой, пусть другая программа программно. Важно, что изнутри AutoCAD, а не снаружи.
К тому же в исходном сообщении сказано
"Пользователь сидит рисует чертеж. В какой то момент запускает приложение ".
Причем это приложение должно что-то сохранить. То есть оно должно работать именно внутри.

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

ShaggyDoc пишет:

Нет проблем и с несколькими AutoCAD, так же как при обращении к одной DLL из разных приложений.

А бывает и валит, по-взрослому. Например, когда открываемый файл требует восстановления или "перегружен" какой-то шнягой. Случай был реальный, опыт есть.

ShaggyDoc пишет:

А из чего, если не из программы? Ну, пусть не юзер рукой, пусть другая программа программно. Важно, что изнутри AutoCAD, а не снаружи.

Ну Автокад-то можно запускать и снаружи из другой проги, например, "Программа выполнения спецификации". Что уже обсуждалось.
Неисповедимы пути господни, ну и разработчика/пользователя.

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

Ситуация подробнее:
Юзер нарисовал чертеж. Сидит довольный такой - нравится ему... smile
Налюбовавшись своей работой, частичкой так сказать себя, он должен нажать на кнопку на тулбаре и ЧТО-ТО должно сохранить то что он сделал в Блоб-поле базы данных в формате, установленным мной (нестандартным - скажем - текстовый файл с названиями цветов, которые юзер от души использовал, желая тем самым получить от работы максимальное эстетическое удовлетворение).
Это ЧТО-ТО я написал на Дельфи (VBA сразу отпадает - проект коммерческий).
Приложение запускается с тулбара без проблем (это я кстати вычитал на этом форуме за что ему огромное человеческое...).
Но как мне быть уверенным, что сохраниться чертеж именно из этого экземпляра акада или документа.
Дело в том, что пользователь может оказаться слабоват фантазией и воспользоваться аналогами своих коллег по излюбленному принципу китайских программистов с мелодичным названием "КопиПаст".
Ну вот собственно и все.
Благодарю за внимание - не ожидал такого развития топика.
Извините, что заставил ждать - подписка почему то не работает, а я на нее и уповал.

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

> Yagovdik
Так и надо делать через COM. Может быть даже через DCOM (но это сложнее).
ЧТО-ТО надо превратить в COM-сервер. То есть написать интерфейсы, которые позволят любым другим приложениям обращаться к его объектам, их методам и свойствам. Это описано в книгах по Delphi. Особенность в том, что для возможности работы с LISP и другими скриптовыми языками в COM-сервере должна быть применена Автоматизация.
Сам сервер может быть в виде DLL или EXE. Примером такого сервера является сам AutoCAD.
"С тулбара" должна запускаться LISP-функция. Внутри ее создается объект COM- сервера, устанавливаются его свойства, вызываются на выполнение методы.
Специфика LISP заключается в возможности передать определенные типы данных. Нельзя, например, надежно передать список строк по типу TStringList. Между Дельфийскими программами можно - там сделали специальный интерфейс IStrings, а из LISP список строк надо формировать добавлением строки по одной.
При таком подходе можно быть точно уверенным, что к серверу происходит обращение именно из того Автокада. Даже если их запущено сотня на одной или разных машинах.
При этом и сам Автокад мог быть откуда-то запущен из другого приложения.

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

Ну что же...
Огромное спасибо за исчерпывающий ответ.
Совету Вашему не последую, но и время на исследование больше тратить не буду - а это большое дело.
Дело в том что необходимо приложение которое не установлено где то и настроено как то,
а которое может работать даже с только вставленной флэхи.
Видимо просто сделаю ограничение - проверю - если несколько окон открыто акадовских - то сказать юзеру чтобы позакрывал

Re: Как получить доступ к запущенному эеземпляру AutoCAD?

Yagovdik (2006-02-17 15:26:44)   
...Дело в том что необходимо приложение которое не установлено где то и настроено как то,
а которое может работать даже с только вставленной флэхи.

А я так и делаю. Ношу с собой флешку с приложениями к Автокаду. Подключаются они к нему так как описал callisto (2006-02-15 05:06:34) во втором топике, и используя PreviosSelection выбирают объекты чертежа, которые пользователь выделил перед запуском программы. На рабочем месте - панелька с кнопочками, па флешке - Делфи прога с теми же кнопочками, чтобы удобно было запускать на чужой машине.
Но с несколькими запущенными Автокадами действительно проблема, хотя очень редко встречающаяся.
Удачи!