|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Подключение COM-сервера к LISP
Регистрация: 13.03.2011
Сообщений: 12
|
||
Просмотров: 7700
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Телепатов здесь нет - больного на стол.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Когда COM-сервер создан в DLL и зарегистрирован в системе, из LISP с ним работают примерно так, как показано в примере: Код:
Например (_ru-sys-info "GetLocalComputerName") или (_ru-sys-info "GetWindowsSystemFolder"). В более сложных случаях COM-серверу передаются параметры путем установки его свойств. |
|||
![]() |
|
||||
Регистрация: 13.03.2011
Сообщений: 12
|
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если так то можно и без COM сервера обойтись - просто exe'шник запустить - особенно если параметров передавать не нужно - то ихмо данный метод предпочтительней т.к. избавляет то необходимости регистрировать COM.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
![]()
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Может расскроете секрет - что нужно сделать-то - если конечно это не государственная тайна - а пока у меня Ваши ответы только удивление с улыбкой вызывают (без обид).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 13.03.2011
Сообщений: 12
|
надо написать фукнцию для автокада на делфи,которая работала бы с объектами автокада. т.е. надо,работая в автокаде, выбрать объект,ну например линию, и вызвать функцию из делфи,которая расставляет определенным образом на этой линии точки. Т.е. надо связать акад и делфи,"автокад не поддерживает делфи в качестве стандарта для разработки приложений...технология Activex, внедренная в систему автокад, делает его доступным для программ,созданных в средах, использующих сом-технологии...". Чтобы связать делфи и акад существует несколько способов:
1-использование библиотеки типов (импортируем библиотеку AutoCAD в Delphi) 2-разработка приложения-сервера (как раз то,что интересует): создаем СОМ-сервер,затем подключаем СОМ-сервер к LISP и из автокада уже можем вызывать программу лисп,которая вызывает сервер. надеюсь,так попонятней)) |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
какой из вышеуказанных способов Вы не выберите - без вызова автокадовких функций Вам не обойтись. Данная задача прекрасно решается обоими методами - либо ком - серверу передаете vla (он-же com) объект линии, либо вызываете программу которая смотрит текущий запущенный автокад - смотрит выбранную линию и используя com сервер автокада - делает с ней все что угодно. Что конкретно у Вас не получается (написать функцию, вызвать ее)?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 13.03.2011
Сообщений: 12
|
не получается вызвать ее.
ну я правильно понимаю: есть возможность вызова сом-сервера через лисп из автокада?или так лучше не делать? p.s. причем функции на сервере надо передать некоторые значения,определяемые пользователем в интеррактивном режиме,например шаг,с которым будут расставляться точки. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Полная каша в голове, то ли у студентов, то ли у преподов.
Цитата:
Как делать COM-сервер в Delphi ("как раз то,что интересует") описано в книгах по Delphi. Как вызвать такой сервер из LISP я написал в #5. Но такому серверу не надо ставить задачу "вызвать функцию из делфи,которая расставляет определенным образом на этой линии точки". Delphi не умеет расставлять точки. Это умеет делать сам AutoCAD. Из программы на Delphi можно вызвать COM-сервер самого Автокада и попытаться что-то сделать его методами. Для выполнения из Delphi внутри Автокада какой-то LISP-функции имеется единственная возможность - SendCommand в командную строку. Или использовать объектные методы, но это уже не LISP. Принципиально имеются два способа совместной работы AutoCAD и Delphi: 1. Основное приложение сделано в Delphi и, при необходимости, обращается к методам AutoCAD. Это может быть программа, которая чего-то много делает внутри себя (обычно "вижуально-гуёво"), а в AutoCAD надо сделать какую-то вспомогательныю часть. Результаты расчетов, например, нарисовать. 2. Основное приложение работает внутри AutoCAD, делает что угодно, но, при необходимости, вызывает какие-то методы из COM-сервера, сделанного на Delphi. А у автора темы смесь ужей, ежей с добавлением проктолого-стоматологических методов лечения этой смесью. |
|||
![]() |
|
||||
Регистрация: 06.04.2009
Сообщений: 702
|
(vlax-invoke-method (vlax-get-or-create-object "CadDSV.Starter") "TransfObj")
в acad20ххdoc.lsp должен быть (vl-load-com) З.Ы: Давно хотел спросить у умного народа вообще без СОМ функции *.dll запустить можно (очень хочется)?
__________________
КазнитьØнельзяØпомиловать:eek: |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
(vlax-invoke-method (vlax-get-or-create-object "ruMacrSrv.macros") "test" a b)
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 13.03.2011
Сообщений: 12
|
Цитата:
Цитата:
Код:
Да и вообще, вопрос был не на счет функции,а на счет того,если можно,то КАК подключить сервер к лисп(изменив библиотечную функцию запуска приложения на лисп),чтобы можно было бы запускать сом-сервер и передавать параметры функции на сом-сервере из автокада |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Попробую и я высказаться
![]() Есть несколько вариантов решения задачи (по крайней мере мне так кажется ![]() Вариант 1. На Delphi (или любом другом привычном языке) пишется dll, в обязательном порядке регистрируемая в ОС. В таком случае все, что написано в dll, будет СОМ-сервером, а AutoCAD выступает в роли СОМ-клиента. СОМ-сервер не зависит от версии AutoCAD (в общем случае), т.к. не для этого он пишется ![]() Вариант 2. На Delphi пишется некий exe-файл, который обращается к уже запущенному AutoCAD как к стороннему приложению. exe получается - СОМ-клиент, а AutoCAD - СОМ-сервер. В зависимости от выбранной схемы связывания (раннее или позднее) может понадобиться и импортирование соответствующих tlb-библиотек. Вариант 3. Начиная с Delphi 2005, кажется, уже поддерживается .NET. Соответственно появляется возможность написать .NET-сборку, загружаемую внутрь AutoCAD (начиная с версии 2005) командой _.netload и живущую вообще по своим принципам.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 06.04.2009
Сообщений: 702
|
В *.dll есть машинный код, СОМ-сервер ведь не сама цель. Я догадываюсь что без регистрации его нереально запустить, хотелось бы услышать это от более опытных товарищей.
__________________
КазнитьØнельзяØпомиловать:eek: |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Мэтры! Матёрые человечищи!
Напишите бедной девушке пример Inproc COM сервера на Delphi. Уверен, пригодится и многим другим, и мне в том числе. Тема-то совсем не простая и лишний хорошо прокомментированный пример никогда не помешает. Пример такой. 1. В AutoCAD запускается лисп функция, запрашивающая у пользователя отрезок, а так же число участков, на которые этот отрезок нужно разметить. 2. Если отрезок указан, вызывается метод из ком сервера и этому методу передаются координаты начала и конца отрезка. 3. Код метода обращается к объектной модели AutoCAD и строит точки на отрезке, размечая его тем самым на указанное число участков. Т.е. ком сервер (dll) одновременно является клиентом AutoCAD'a. Offtop: Для Сергей Дубина. Может это то, что вы ищете?
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 15.03.2011 в 10:30. |
|||
![]() |
|
||||
Регистрация: 11.10.2010
Сообщений: 979
|
Еще один вариант, но на VB: http://www.arcada.com.ua/forum/viewtopic.php?t=460
Но я почему-то не вижу там ни картинок, ни чего бы то ни было еще ![]()
__________________
(/= RegDate StartReadDate) |
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
Здравствуйте, уважаемые!
Если мой вопрос не совсем в тему, то прошу извинить. Суть в том, что все большее число пользователей приобретают 64-х разрядные Windows. AutoCad начиная с 2008-го устанавливается на них как 64-х разрядная версия. Dll-ки, написанные на привычном, но старом Delphi 7 получаются 32-х разрядными. В результате, совместно с LISP-ами они не работают. Насколько я понимаю, в одном адресном просранстве разрядность AutoCad и Dll должны совпадать. Хотелось бы спросить у опытных программистов совета и рекомендаций по этому вопросу. Как вы решаете проблему. |
|||
![]() |
|
||||
Регистрация: 13.03.2011
Сообщений: 12
|
Цитата:
Пожааааалууйсто,подскажите,добрые формучане ![]() |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Вам это уже показывали в сообщениях № 4,5,20,22.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 06.04.2009
Сообщений: 702
|
а это не смотрели?
http://dwg.ru/pub/8
__________________
КазнитьØнельзяØпомиловать:eek: |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) | Red Nova | LISP | 5025 | 20.08.2025 22:52 |
LISP получить список установленных в системе (векторных) шрифтов или хотя бы узнать, установлен ли указанный | Ax3 | LISP | 9 | 08.02.2011 14:11 |
{Конкурс} Lisp. Задачки для студентов | gomer | LISP | 10 | 05.01.2011 16:33 |
Запуск Lisp команды в новом документе | BlackHarp | LISP | 1 | 26.03.2009 23:06 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |