|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как узнать путь к выполняемому лисп файлу?
Регистрация: 04.05.2010
Сообщений: 338
|
||
Просмотров: 9476
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 04.05.2010
Сообщений: 338
|
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Можно только средствами ObjectARX, насколько я помню из общения с А.Ривилисом.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Я считаю, что это "косяк" автодеска. Не составляло никакого труда создать событие, предшествующее загрузке библиотеки, в котором аргумент, помимо прочего, имел бы свойства FileFullName и Cancel. Первое - содержит полное имя загружаемого файла, второе - логическое значение, указывающее следует ли отменить загрузку.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Вот чего действительно не хватает в объектной модели AutoCAD, так это методов наподобие LoadLisp и RunLisp. LoadARX - есть, LoadDVB -есть, даже LoadShapeFile есть для любителей археологии. И просто Load есть (для типов линий и меню). А вот LoadLisp - нет. Объясняю это исключительно происками "сионистов" и примкнувших к ним майкрософтчиков. Слишком тогда просто было бы многое решать, безо всяких SendCommand. А события есть: BeginLISP(FirstLine), EndLISP, LISPCancelled(). Толку-то от них. |
|||
![]() |
|
||||
Цитата:
Цитата:
Цитата:
Я в курсе об этих событиях и в предыдущемо сообщении писал о текущей реализации событий, в которых отсутствуют обозначенные мною свойства в параметрах этих событий (для загрузки ARX/.NET/VBA). Автодеску не потребовалось бы много усилий на их добавление - просто, видимо, желания нет (возможно в основу положены какие-то соображения).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
вот и не отвлекайтесь, пишите на сишарпе и be happy... Вот, хотел написать, что перевести лисп программу среднего уровня, это не так уж сложно, но... при всем уважении к новым технологиям, все они (а это по сути си++ а ля аркс, сишарп и барсик) по простоте написания кода и в подметки лиспу не годятся (тут вот многие энтузиасты для солидности лямбды пользуют, а вы пока модель для записи не откроете и нарисовать ниче не могете)
Да все можно, главное знать, чего хочешь-то. Имя файла из которого загружена функция не гарантирует ничего, поэтому и нет возможности отследить ее происхождение, как и нет возможности ее выгрузить, да это по сути и не нужно... а что нужно? загрузить менюшку? найти блок? так есть findfile, getfiled, vl-registry-read и vl-catch-all-apply например так вот: Код:
Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
И загрузка функций без помощи findfile, а с передачей полного вычисляемого имени. И при системном подходе уже по имени функции известно, где она проживает и откуда загрузилась. Для примера - имя ru-3d-steel-erico-bracket-2-channel-draw однозначно говорит, где эта функция находится. Помимо НеЗнаюЗачемНоКому-тоНужного программного определения её местоположения, такое имя легко позволяет найти и вручную среди тысяч подобных. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Если смотреть чуть пошире (на Автолисп как на лисп) - то понятно что не может в принципе быть функции определяющей "свое" местоположение. Может быть "частный случай" который иногда будет работать правильно. Добавим сюда еще что в автолиспе динамическая типизация и как понятие отсутствует именные пространства (окружения - не путать с Net'овскими "определителями активных библиотек"). Про програмно сгенерированные функции я вобще молчу (хотя люба функция имеющая хотя-бы 1 аргумент, по сути перед каждым eval'ом - то есть при каждом выполнении ГЕНЕРИРУТЬСЯ заново, и совсем не факт что внесет больше изменений в нее загруженный "скелет", чем аргумент который может быть получен откуда угодно).
з.ы. Кто не понял про что написанно, но интересно - изучите суть функций READ, EVAL/APPLY - у них во всех лиспах суть одинаковая.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Код:
Цитата:
Для AutoLISP средой, запускающей программу, является AutoCAD. И AutoCAD внутри себя конечно знает полное имя загруженного LISP-файла. Но "враги народа", пробравшиеся в фирму, специально не дали средства, чтобы это знал и "простой народ". Извлечь эти знания окольными путями можно (как - я показал), но только в частных случаях. А универсального решения, пригодного на все возможные варианты загрузки Lisp - нет. Цитата:
PS. Весьма подробно варианты загрузки реализованы в библиотеке Reini Urban STDLIB. А уж для любителей apply,eval, read и прочих мапкаров это вообще "просто праздник какой-то". Жалко, давно работа заброшена. |
|||
![]() |
|
||||
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Josser Регистрация: 09.11.2011
Сообщений: 66
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Правильный инсталлятор запишет в правильный раздел и правильную ветку какой-нибудь ключ, или кучу ключей, в которых может быть записано положение любых компонентов. А правильное приложение знает этот ключ, читает его, узнает и свой адрес, и адреса любых своих компонентов. Никаких путей доступа Автокада тут и не требуется использовать. Единственно, если захотите сделать автозапуск своего приложения, то можно сгенерировать инсталлятором acaddoc.lsp. Вот этот файл и нужно загружать через findfile. Но тогда надо сделать профиль своего приложения и помещать свой acaddoc.lsp в путь поиска этого профиля. Чтобы не мешать никаким другим приложения. |
|||
![]() |
|
||||
Josser Регистрация: 09.11.2011
Сообщений: 66
|
Цитата:
Интеграция с автокадом происходит через файл фрагментарного меню и штатную команду MENULOAD. На роль головного файла ("паровоза") такого лисп-приложения прекрасно подходит файл *.mnl. Вот при таком сценарии развертывания и актуален вопрос, обсуждаемый в данной ветке, т.е. в коде файла *.mnl определять, откуда же он загружается. ИМХО. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
При таком сценарии достаточно определить имя файла меню. Там же и будет лежать mnl.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Josser Регистрация: 09.11.2011
Сообщений: 66
|
Что значит "определить имя файла меню"? Я - разработчик приложения и, естественно, знаю имя файла фрагментарного меню. Вопрос, как определить полный путь к этому файлу из кода файла *.mnl, например, если он не лежит на путях поддержки?
Можно и по другому сформулировать проблему: я хочу чтобы мое приложение можно было загружать "вручную" командой APPLOAD и оно работало вне зависимости от того, откуда загружено. p.s. Любой лисп-файл кто-то загружает, т.е. всегда существует некий "менеджер-загрузчик", который знает, откуда и что берется. Этот менеджер может предлагать служебную функцию, возвращающую полный путь к любому загруженному им же лисп-файлу. Останется этой функцией воспользоваться в коде. Но это уже определённая организационная дисциплина и совсем другая история... Последний раз редактировалось Salt, 21.07.2012 в 00:59. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Цитата:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запомнить путь к открытому файлу? | Ева | Программирование | 7 | 15.06.2012 12:27 |
Определить путь к файлу LISP | Leo_fmf | LISP | 3 | 27.01.2012 10:36 |
как получить путь к сетевому текстовому файлу | Victorovich | Программирование | 3 | 30.06.2008 15:47 |
Длинный путь к файлу проблема | mvart | AutoCAD | 12 | 11.02.2008 13:52 |
Как программно узнать настоящий путь к файлу растра, если он был найден Акадом не по указанному пути | kp+ | Программирование | 4 | 20.12.2007 12:54 |