Подключение COM-сервера к LISP
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подключение COM-сервера к LISP

Подключение COM-сервера к LISP

Ответ
Поиск в этой теме
Непрочитано 13.03.2011, 18:56 #1
Подключение COM-сервера к LISP
Аля_777
 
Регистрация: 13.03.2011
Сообщений: 12

Доброго времени суток!
Задача такая:необходимо написать свою функцию на делфи к автокаду.
Есть делфи-приложение,в виде COM-сервера с функцией для акада,а на лисп нужно написать функцию,котрая будет вызывать этот сом-сервер.
Пытаюсь запустить из под автокада прогу написанную на лисп,которая вроде как должна подключаться к сом-серверу и запускать его в автокаде,но она не пашет...

С лисп почти не знакома,в этом и проблема..перерыла кучу примеров,но безрезультатно,буду очень рада если кто-нибудь поможет!
Просмотров: 7700
 
Непрочитано 13.03.2011, 19:18
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Во всем виновата мафия
gomer вне форума  
 
Непрочитано 13.03.2011, 19:47
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Аля_777 Посмотреть сообщение
Пытаюсь запустить из под автокада прогу написанную на лисп,которая вроде как должна подключаться к сом-серверу и запускать его в автокаде,но она не пашет...
Телепатов здесь нет - больного на стол.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2011, 20:18
#4
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Телепатов здесь нет - больного на стол.
собсно,по примеру из книги "сапр на базе autocad..."


Код:
[Выделить все]
 (defun dlg-show-app-run (command_line wait / srv)
    (if (setq srv (vlax-get-or-create-object "ruMacrSvr.RunApp"))
      (progn
      (vlax-invoke-method srv "test")
       (vlax-invoke-method srv "Run" command_line
         (ru-conv-value-to-wordbool wait)
        );_end of vlax-invoke-method
      );_end of progn
(alert  "не удалось запустить")
 );_end of if
);_end of defun

 
Аля_777 вне форума  
 
Непрочитано 13.03.2011, 21:47
#5
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Есть делфи-приложение,в виде COM-сервера с функцией для акада,а на лисп нужно написать функцию,котрая будет вызывать этот сом-сервер
В COM-сервере не может быть "функций для акада". У COM-севера могут быть объекты, свойства и методы. Для возможности доступа из LISP COM должен иметь "Automation Object" выбираемый при создании "ActiveX Library" в Delphi.

Когда COM-сервер создан в DLL и зарегистрирован в системе, из LISP с ним работают примерно так, как показано в примере:

Код:
[Выделить все]
 
(defun _ru-sys-info (method_name / srv result)
;; Создаем объект сервера, обращаясь по имени
  (if (setq srv	(vlax-get-or-create-object
		  "ruSysInfo.SystemInfo"
		) 
      )
    (progn
      ;; Применяем заданный метод
      (setq result (vlax-invoke-method
		     srv
		     method_name
		   )
      )
      ;; удаляем объект
      (vlax-release-object srv)
      (setq srv nil)

    )
    (alert "Не могу запустить ruSysInfo.SystemInfo")
  ) 
  result
)
В примере показана работа с очень простым сервером, который делает доступным в LISP различную системную информацию.
Например (_ru-sys-info "GetLocalComputerName") или (_ru-sys-info "GetWindowsSystemFolder").

В более сложных случаях COM-серверу передаются параметры путем установки его свойств.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 13.03.2011, 21:56
#6
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
В COM-сервере не может быть "функций для акада". У COM-севера могут быть объекты, свойства и методы.
на сом-сервере есть метод,который должен работать с объектами автокада,причем используя методы акада,разве так нельзя связывать акад и делфи?
Аля_777 вне форума  
 
Непрочитано 13.03.2011, 22:00
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Аля_777 Посмотреть сообщение
на сом-сервере есть метод,который должен работать с объектами автокада,причем используя методы акада,разве так нельзя связывать акад и делфи?
Если так то можно и без COM сервера обойтись - просто exe'шник запустить - особенно если параметров передавать не нужно - то ихмо данный метод предпочтительней т.к. избавляет то необходимости регистрировать COM.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2011, 22:07
#8
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


ну это, конечно, можно,импортируя библиотеку типов автокада-гораздо проще,но мне хотелось бы ,например, изменить библиотечную функцию лисп,например по запуску приложения (сом-сервера)и затем работать с автокадом...
Аля_777 вне форума  
 
Непрочитано 13.03.2011, 22:20
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Аля_777 Посмотреть сообщение
но мне хотелось бы ,например, изменить библиотечную функцию лисп,например по запуску приложения (сом-сервера)и затем работать с автокадом...
Чего?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2011, 22:23
#10
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


ну я так поняла, говоря про .ехе, вы имели ввиду вариант импорта библиотеки акада в делфи...короче,мне такой вариант не подходит=)
Аля_777 вне форума  
 
Непрочитано 13.03.2011, 22:31
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Может расскроете секрет - что нужно сделать-то - если конечно это не государственная тайна - а пока у меня Ваши ответы только удивление с улыбкой вызывают (без обид).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2011, 22:54
#12
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


надо написать фукнцию для автокада на делфи,которая работала бы с объектами автокада. т.е. надо,работая в автокаде, выбрать объект,ну например линию, и вызвать функцию из делфи,которая расставляет определенным образом на этой линии точки. Т.е. надо связать акад и делфи,"автокад не поддерживает делфи в качестве стандарта для разработки приложений...технология Activex, внедренная в систему автокад, делает его доступным для программ,созданных в средах, использующих сом-технологии...". Чтобы связать делфи и акад существует несколько способов:
1-использование библиотеки типов (импортируем библиотеку AutoCAD в Delphi)
2-разработка приложения-сервера (как раз то,что интересует):
создаем СОМ-сервер,затем подключаем СОМ-сервер к LISP и из автокада уже можем вызывать программу лисп,которая вызывает сервер.
надеюсь,так попонятней))
Аля_777 вне форума  
 
Непрочитано 13.03.2011, 23:21
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Аля_777 Посмотреть сообщение
надо написать фукнцию для автокада на делфи,которая работала бы с объектами автокада
какой из вышеуказанных способов Вы не выберите - без вызова автокадовких функций Вам не обойтись. Данная задача прекрасно решается обоими методами - либо ком - серверу передаете vla (он-же com) объект линии, либо вызываете программу которая смотрит текущий запущенный автокад - смотрит выбранную линию и используя com сервер автокада - делает с ней все что угодно. Что конкретно у Вас не получается (написать функцию, вызвать ее)?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2011, 23:34
#14
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


не получается вызвать ее.
ну я правильно понимаю: есть возможность вызова сом-сервера через лисп из автокада?или так лучше не делать?
p.s. причем функции на сервере надо передать некоторые значения,определяемые пользователем в интеррактивном режиме,например шаг,с которым будут расставляться точки.
Аля_777 вне форума  
 
Непрочитано 13.03.2011, 23:41
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Аля_777 Посмотреть сообщение
надо написать фукнцию для автокада на делфи,которая работала бы с объектами автокада. т.е. надо,работая в автокаде, выбрать объект,ну например линию, и вызвать функцию из делфи,которая расставляет определенным образом на этой линии точки. Т.е. надо связать акад и делфи,"автокад не поддерживает делфи в качестве стандарта для разработки приложений...технология Activex, внедренная в систему автокад, делает его доступным для программ,созданных в средах, использующих сом-технологии...". Чтобы связать делфи и акад существует несколько способов:
1-использование библиотеки типов (импортируем библиотеку AutoCAD в Delphi)
2-разработка приложения-сервера (как раз то,что интересует):
создаем СОМ-сервер,затем подключаем СОМ-сервер к LISP и из автокада уже можем вызывать программу лисп,которая вызывает сервер.
надеюсь,так попонятней))
Бред! Преподов в топку... студентов на каникулы... все это решается без комов, средствами лиспа
gomer вне форума  
 
Автор темы   Непрочитано 13.03.2011, 23:49
#16
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


Цитата:
Сообщение от gomer Посмотреть сообщение
все это решается без комов, средствами лиспа
ага,есть подобная задача,которую решают именно лиспом,но в моем случае угораздило через делфи
Аля_777 вне форума  
 
Непрочитано 14.03.2011, 00:05
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Давай progid своего com-сервера, имена методов (свойств?) и аргументы которые необходимо ему передать
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.03.2011, 00:50
#18
Аля_777


 
Регистрация: 13.03.2011
Сообщений: 12


progid: ruMacrSrv.macros
а что касается функции,она в разработке^^ поэтому сейчас просто, тестовая:
название метода: test
параметры: a, b
результат: c
Аля_777 вне форума  
 
Непрочитано 14.03.2011, 06:43
#19
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Полная каша в голове, то ли у студентов, то ли у преподов.

Цитата:
2-разработка приложения-сервера (как раз то,что интересует):
создаем СОМ-сервер,затем подключаем СОМ-сервер к LISP и из автокада уже можем вызывать программу лисп,которая вызывает сервер.
надеюсь,так попонятней))
Зачем нужен COM-сервер, который надо подключать к LISP? Да для того, чтобы он выполнял действия, которые не умеет делать LISP своими штатными средствами. Например, в COM-сервере может быть спрятано диалоговое окно или большая "вижуальная" система для работы с БД.

Как делать COM-сервер в Delphi ("как раз то,что интересует") описано в книгах по Delphi. Как вызвать такой сервер из LISP я написал в #5.

Но такому серверу не надо ставить задачу "вызвать функцию из делфи,которая расставляет определенным образом на этой линии точки".

Delphi не умеет расставлять точки. Это умеет делать сам AutoCAD. Из программы на Delphi можно вызвать COM-сервер самого Автокада и попытаться что-то сделать его методами. Для выполнения из Delphi внутри Автокада какой-то LISP-функции имеется единственная возможность - SendCommand в командную строку. Или использовать объектные методы, но это уже не LISP.

Принципиально имеются два способа совместной работы AutoCAD и Delphi:

1. Основное приложение сделано в Delphi и, при необходимости, обращается к методам AutoCAD. Это может быть программа, которая чего-то много делает внутри себя (обычно "вижуально-гуёво"), а в AutoCAD надо сделать какую-то вспомогательныю часть. Результаты расчетов, например, нарисовать.

2. Основное приложение работает внутри AutoCAD, делает что угодно, но, при необходимости, вызывает какие-то методы из COM-сервера, сделанного на Delphi.

А у автора темы смесь ужей, ежей с добавлением проктолого-стоматологических методов лечения этой смесью.
ShaggyDoc вне форума  
 
Непрочитано 14.03.2011, 08:14
#20
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


(vlax-invoke-method (vlax-get-or-create-object "CadDSV.Starter") "TransfObj")
в acad20ххdoc.lsp должен быть (vl-load-com)
З.Ы:
Давно хотел спросить у умного народа вообще без СОМ функции *.dll запустить можно (очень хочется)?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подключение COM-сервера к LISP



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите лиспу на примере (или как 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