|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
16.11.2010, 11:41 | #1 | |
Почему в lisp отсутствует аналог функции (arxload ...) для .NET сборок.
это только кличка
Москва
Регистрация: 22.10.2006
Сообщений: 252
|
||
Просмотров: 3498
|
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Боюсь что autodesk уже давно "плюнул" на лисп. ИХМО непосредственно в лиспе, как минимум, за последние 5 версий НИЧЕГО не добавилось (хотя добавить безусловно есть что).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Цитата:
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
Самое смешное, что и из ObjectARX нет официальной функции для загрузки .NET-сборок. Хотя в whishlist это было и наверное когда-нибудь сделают.
Сборка acdbmgd.dll экспортирует функцию LoadManagedDll, которой передается один строчный параметр - путь к файлу сборки. Можно сделать arx-файл (но лень, т.к. потребуется делать такие файлы под все версии AutoCAD), который будет экспортировать в lisp функцию (netload <путь к файлу сборки>) Последний раз редактировалось Александр Ривилис, 23.11.2010 в 09:05. |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Александр, а добраться до LoadManagedDll можно только через LoadLibrary() + GetProcAdress() или же где-то есть acdbmgd.lib?
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 16.11.2010 в 13:39. |
|||
|
||||
Цитата:
Код:
P.S.: Проверял в x86 - для x64 возможно требуется модификация. В AutoCAD 2006 не нужна конвертация пути в Unicode Последний раз редактировалось Александр Ривилис, 17.11.2010 в 00:38. |
||||
|
||||
Цитата:
Код:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Цитата:
Есть еще один момент. Assembly.LoadFrom() - штатный метод динамической загрузки сборок .NET, который ничего не знает об атрибутах [LispFunction("tram-param")] или [CommandMethod(...)]. Сейчас не могу проверить, но выскажу опасение, что функции помеченные данными атрибутами не будут при загрузке обработаны особым образом, а значит внешние функции и команды, определенные в сборке, загружаемой через LoadFrom(), будут попросту проигнорированы (т.е. их не окажется среди функций и команд AutoCAD). Это же касается и класса, реализующего IExtensionApplication. Рад буду, если ошибаюсь. Проверьте, плиз, кому не лень.
__________________
...в шее моей жилы железные, и лоб мой - медный... Последний раз редактировалось Pastor, 17.11.2010 в 00:14. |
|||
|
||||
Цитата:
P.S.: Hwd - когда я говорю про ObjectARX я ни при каких условиях не имею в виду .NET |
||||
|
||||
Можешь не проверять - всё работает корректно (и атрибуты и интерфейс) - у моих пользователь загрузчик именно так и грузит .Net-плагины (Acad 2009).
Имхо - проблем и не должно было возникнуть, т.к. .Net абсолютно фиолетово, какие атрибуты и интерфейсы прикручены к классам/методам, ведь они нужны не .Net, а AutoCAD и именно он (AutoCAD) через Reflection (т.е. средствами .Net) анализирует сборку, которая загружена в ему принадлежащий домен и на основе полученной информации реализует нужную ему логику. Цитата:
P.S. Касательно загрузки плагинов: писал когда-то загрузчик плагинов в AutoCAD - старая версия решения (грузит ARX/.Net/Lisp) здесь. Offtop: Имеется более "свежий" вариант загрузки (его я пока не опубликовывал) - в нём процесс загрузки разделён на три этапа: 1. Сначала грузятся плагины, определённые как обязательные к загрузке для всех пользователей домена 2. Затем грузятся все библиотеки, определённые к обязательному использованию в рамках конкретной доменной группы (если юзер состоит более чем в 1 группе - грузятся библиотеки, определённые для каждой из этих групп) 3. На последнем этапе грузятся библиотеки, определённые самим пользователем к обязательной загрузке В эту же версию добавил загрузку и VBA (пусть уж будет, до полноты). Дабы не назначать каждому юзеру права на удалённую загрузку (через caspol.exe), сделал так, чтобы копии плагинов хранились на локальных машинах юзеров, а при запуске автокада происходила односторонняя синхронизация с серверным содержимым, после чего библиотеки грузятся с локальной машины (т.о. отпала надобность в использвании caspol.exe). Админ с помощью конфигурационных файлов управляет синхронизацией (может отменить её для всех/для конкретной доменной группы/для конкретного пользователя, либо указать что именно должно быть синхронизировано, а всё остальное не проверять - т.о. экономится время на проверку). Работает как часы, правда всё не выберу время GUI к нему прикрутить - в случае необходимости приходится конфиг-файлы в текстовом редакторе править, правда в виду того, что загрузка выполняется на основе фильтров, то при добавлении на сервер новой библиотеки, она автоматом копируется на локальные машины - т.е. пока править вручную конфиги не приходилось, но потенциально такая потребность может возникнуть, поэтому желательно GUI всё же прикрутить.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 17.11.2010 в 08:33. |
||||
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
To hwd.
в вашем загрузчике есть непонятное для меня место Код:
__________________
...в шее моей жилы железные, и лоб мой - медный... |
|||
|
||||
Да, так и есть.
> Pastor Спасибо за замечание - исправлю.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Аналог функции EVAL (LISP) в Exele | kp+ | LISP | 11 | 01.04.2010 16:52 |