|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
09.12.2008, 16:22 | #1 | |
Функции AutoLISP из ... DLL!
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 8166
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Supermax, я уже не знаю, чему больше удивляться - твоей работоспособности или твоей неинформированности. Уже не раз и не два обсуждалась тема передачи данных VB(A)<->LISP и вызова lisp-функций из-под другого языка. vlax.cls решение называется. И на dwg.ru оно выкладывалось
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Для того, чтобы функции или процедуры AutoLISP-a попали в DLL-файл, надо привести текст файла *.lsp в соответствующий вид.
1. Перед началом функции или процедуры и по окончании ее поставить метку. Какую - скажу позже. 2. Заключить все комментарии, расположенные за пределами лисп-выражений в пустой код, напирмер (setq a ...комментарий ... nil) Дело в том, что попав в командную строку признак комментария ; не срабатывает, если он не в теле лисп-выражения. Все слова комментариев, не включенные в тело кода понимаются как команды и Автокад выдает череду ошибок, пока не доберется до открывающих скобок. В общем нельзя без кода запихивать в DLL комментарии. Скачать вот от сюда http://www.jorgon.freeserve.co.uk/index.htm GoAsm.exe GoLink.exe. GoRC.exe. Это компилятор Распаковать в одну папку. Там несколько одинаковых файлов в каждом архиве - нажимать при распаковке либо "заменить", либо "пропустить". Зайти Меню "Пуск" --> Панель управления --> Система --> Вкладка "Дополнительно" --> Кнпка "Переменные среды" --> Окно "Системные переменные" -> Строка "Path" Выделить строку "Path" и нажать кнопку "Изменить". Поставить в конце точку с запятой и добавить путь к папке, куда вы распаковали компилятор. Нажать Ok. Теперь дальше: Есть такой файл, называется "Парсер_AutoLISP.js", написанный на языке JScript. Он приводит ваш *.lsp файл в вид, который будет воспринматься компилятором и запускает оного. В результате вы получаете файл *.dll с таким именем, какое имя вашего *.lsp файла. Делается это так: Берете файл *.lsp и тащите его мышкой на значек файла Парсер_AutoLISP.js если все зер гуд, появляется сообщение, что файл скомпилирован и в этой же папке появляется dll-файл. Теперь про метки: Если открыть файл Парсер_AutoLISP.js блокнотом, то первые две строки Код:
;start - начало ;end - конец Можете сюда записать любой вид меток, какой захотите. Можно несколькими словами. Далее: Метки выглядят так: ;start имя_функции_или_процедуры далее, до конца строки что угодно. . . .тело функции или процедуры . . ;end имя_функции_или_процедуры далее, до конца строки что угодно. Имя функции или процедуры одним словом! При компиляции вся строка с метками уничтожается. То имя функции или процедуры, которое вы вставили в метку будет фигурировать в списке функций или процедур файла DLL. |
||||
|
||||
Вот теперь можно и пофлудить.
VVA, я тут твои функции в библиотеку запихнул, для пробы. Пока впихивал, кучу ошибок нашел, чисто оформительского харрактера. Я тебе, если нужно потом покажу. Эта DLL-ка так, для пробы. Можешь попробовать свою сделать. Kpblc, теперь, я надеюсь, ты разобрался о чем идет речь? Жду дальнейших комментариев. Ну и от себя. Зачем мы с YMP это затеяли? - Ну, в VBScripte и JScripte библиотек функций и процедур нет, вот теперь есть. Заодно и для других языков сгодится, в частности для AutoLISP-a. С одной стороны код открыт и все комментарии к нему вместе с ним, с другой стороны, можно отдельные функции вызывать и не втемную использовать функции, а понимать, что и как они делают. Размер *.dll практически равен размеру файла *.lsp из которого эта DLL скомпилирована. Текст-то в открытом виде там содержится. Есть одна особенность в применении функций, записанных таким образом. Надо все имена глобальных переменных, которые использует такя функция, передавать ей в аргументах. Если функция должна в 10 местах менять значения каких-то переменных, то повторюсь - все имена в аргументы. Последний раз редактировалось Supermax, 11.12.2008 в 23:14. |
||||
|
||||
Цитата:
Обо всем я уже написал выше. И про "нафиг это надо?", и про "А просто загружать lisp-файл с нужными функциями что мешает?". Цитата:
В DLL можно хранить библиотеку функций на таких скриптовых языках, как VBScript, Jscript и другие и использовать эти функции через СОМ объект MSScriptControl.ScriptControl. Лично мне, ползать по библиотечным Лисп-файлам в поисках нужной функции, где не почитав ее хелп и не посмотрев ей в глаза, сам не знаешь, нужна она тебе или нет, жутко не нравится. Загружать все скопом, тоже дурость. Это сейчас у вас одна библиотека, а завтра будет 10. В одной есть одно, в другой - другое и т.д. Все загружать? |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
А это специально, для таких, кто подправить хочет. Вот возьми, отправь содержимое на princ to file и редактируй, аж до посинения. А чужое не надо редактировать.
Вообще, у этого "извращения" есть еще один момент. Если запустить блокнот из сценария, куда это "извращение" вставлено, то можно, по горячей клавише его вызывать, нужную DLL выбирать, из нее нужную функцию (предварительно ее разглядев в MsgBox-e) и в блокнот, где курсор мигает, вставлять. Я это, дополнительное "извращение" ОБЯЗАТЕЛЬНО сварганю. |
||||
|
||||
Кстати о птичках! Можно ведь и не блокнот, а что угодно! Вставлять то будет в текущее окно! Да хоть в чат, да хоть в любой редактор сценариев, в том числе и в Автолисповский.
Какие мне идеи приходят в голову во время дискусий! Давайте еще, подкиньте пару а-йа-яев. |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
конструктор Регистрация: 29.08.2007
Москва
Сообщений: 55
|
Игры разума Поосторожнее с этими играми.
__________________
Продумано до мелочей |
|||
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
|
скорее всего както так: http://forum.dwg.ru/showthread.php?t=39894
|
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как передать функции (getkword) Список ключевых слов из списка? | Kostinok | Программирование | 31 | 31.05.2012 13:08 |
Предложение: Готовые функции | Apelsinov | Библиотека функций | 170 | 27.06.2010 23:51 |
Вызов функций Windows API из AutoLISP | Supermax | LISP | 47 | 18.12.2008 12:13 |
Функции в AutoLISP | Briz06 | LISP | 4 | 14.10.2006 13:25 |