|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Просьба протестировать функцию
Thượng Tá Quân Đội Nhân Dân Việt Nam
44d32'44"С, 33d26'51"В
Регистрация: 14.03.2005
Сообщений: 13,372
|
||
Просмотров: 7089
|
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
|
|||
![]() |
|
||||
Инженер Регистрация: 18.02.2005
Самара
Сообщений: 747
|
Цитата:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Объясняю, в чем дело.
1. В первой строке теста печатается версия Автокада (чтобы вручную не напрягаться с "конфиденциальностью". 2. Во второй строке функция vla-get-supportpath должна возвращать SupportPath, разделенные ; Эта строка записывается в реестр, а пути отображаются в диалоге Options в Support File Search Path. Мы ее запомнили, чтобы восстановить потом 3. В третьей строке функцией vla-put-supportpath добавляем в начало фиктивный каталог. В этот момент этот каталог добавляется и в реестр и в диалог (проверить можно пошаговым исполнением). 4. В четвертой строке мы читаем с помощью vla-get-supportpath дорожку. А в ней нет добавленного каталога!!! 5. В пятой строке восстанавливаем первоначальный путь - чтобы у тестеров не осталось грязи. А потом еще раз печатаем для проверки. Пока у всех показывает, что vla-get-supportpath возвращает не все. Причем возвращает не все, даже если Автокад перезагрузить - хотя в реестре и диалоге новый каталог показывается. Не могу понять в чем дело. Может быть я зациклился на какой-то элементарной ошибке? Натычьте носом. |
|||
![]() |
|
||||
Цитата:
У меня какое-то ощущение дежавю, если честно. Пойду покопаюсь в своем приложении. Я смутно помню, что во время оно здорово намучился с этими путями. |
||||
![]() |
|
||||
Машиностроение, Проектирование Регистрация: 15.09.2003
Москва
Сообщений: 1,113
![]() |
Аналогично, не сохраняется.
а если сделать изменения, выйти из проги, а потом считать другой? Я к тому что может быть реестр надо "перечитать" -Читал предыдущие посты невнимательно, каюсь ![]() > PilotПодгрузи (vl-load-com) |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
Цитата:
Цитата:
Цитата:
Никак не пойму, откуда эта лишняя строка появляется? |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
С лишней строкой так и не разобрался, зато получилось вывести каталог.
Цитата:
Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Несуществующий каталог я просто для примера включил. По идее, несуществующий каталог не должна включать функция vla-put. Но она его принимает, каталог записывается в реестр и появляется в диалоге.
Обязанность get-функции вернуть то, что записано, не умничая. Конечно, для гарантии можно включить и создание каталога. Однако сталкиваюсь и с ситуациями, когда на другом компьютере не возвращается и имя реально существующего каталога. Нет стабильности, и однозначности, что еще опаснее. PS - Лишняя строка - это просто результат выполнения всей функции. Один раз печатает print, а последний - результат. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А если попробовать через (setenv "ACAD")? Пишу с машины без установленного acad, поэтому могу ошибаться.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Но дело не в том, как другим путем прочитать. Дело "в прынцыпе". |
|||
![]() |
|
||||
Цитата:
Выкладывает, например, кто-нибудь программу на VBA -> не работает -> надо пойти и подлючить какую-нибудь Reference -> Как бы он ее такую конечному пользователю продал бы, интересно? |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Всех бесят. Но тут есть разные причины:
1. Недоработки со стороны автора - чаще всего. Обычно не со зла, просто автор чего-то не знает. Хотя бывает, что знает, но специально так делает. Обычно это неучет особенностей NT-подобных систем, прав пользователей и системы безопасности. 2. Глюки самого Автокада. Некоторые обнаруживаются не сразу. Например, вот эта ошибка (а может, и не "глюк", а "фича") объявилась на 1001-компьютере. А на 1000 - работает нормально. Но нужно было сочетание ряда непредсказуемых условий, чтобы наткнуться. Конечно, исправить - дело плевое, замена одного файла библиотеки функций решит проблему. Все пользователи на строгом учете. Хуже, когда ужасные ошибки делаются в очень популярных системах. Например, сейчас массово переходят на OpenOffice. Мне пришлось тестировать плотно Calc и Base и выяснилось, что, при определенных условиях, они вообще неработоспособны. Причем предыдущие версии работали нормально, а самые свежие вообще разучились (Base). А Calc (заменитель Excel) вообще неправильно "калькулирует" в некоторых ситуациях. Причем об этом знают, но успокаивают (цитирую) Цитата:
Какие такие «остальные случаи» для плохо считающего калькулятора? Использование в качестве пресса для бумаг? Спасибо всем за содействие с тестом. Ситуация прояснилась, решение найдено. |
|||
![]() |
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 311
|
А-а, так получается исходная программа и не должна вернуть имя несуществующего каталога? И соотв обязана вывести имя существующего (извините, что уточняю, не очень разбираюсь в объектных функциях, а тем более в их связи с реестром).
Вспомнил еще о фаерволах, настройках безопасности винды и прочем. Ведь можно запретить программам менять записи в реестре, перемещать файлы программ и т.п. Хотя это Вы наверняка в первую очередь проверили. |
|||
![]() |
|
||||
проектировщик Регистрация: 07.03.2007
Шахты
Сообщений: 32
|
ShaggyDoc:
3. ... функцией vla-put-supportpath добавляем в начало фиктивный каталог. В этот момент этот каталог добавляется и в реестр и в диалог (проверить можно пошаговым исполнением). 4. В четвертой строке мы читаем с помощью vla-get-supportpath дорожку. А в ней нет добавленного каталога!!! У меня результат тот же, если не создать заранее реальный каталог. Реальный каталог в строке выводится. AutoCAD 2006 русский. |
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
Если есть возможность отсутствия каталога в путях поддержки, то нужна фукция проверки на его присутствие, а там уже надо думать по каким причинам он изчез, например пользователь запустился со спецярлыка, сменил добавил удалил профиль, появился новый пользователь виндофс, случайно удалил из окна настроек. Если вашего пути поддержки нет но он нужен то добавить и после того как проверка пройдена грузить лиспы из этого каталога или выдать сообщение об ошибке.
я у себя свои лиспы так и гружу через ACADDOC. Эта мысль мне пришла в голову когда СПДС начал пользовать ну и когда там автокад переустановить надо чтоб в настройки не пользовать каждый раз он автоматически добавляется при первом запуске и при запуске СПДС. при этом я точно уверен что каталог есть на диске и все лиспы в нем присутствуют. А если каталога нет на диске, но он был то тут явно пользователь сам постарался и сам виноват. "Ой, ма, смотри чёй это за каталог такой смешной C:\Documents and Settings\LAMER\Application Data\Autodesk\AutoCAD 2007\R17.0\rus\Support\ЧужиеLISPы". DELET. Тут уже ничего не поделаешь и ждет вас оказание вечного суппорта. И нет вашей вины, и пусчай он сам мучится. Если программа расчитана на широкий круг пользователей которым невдомек, что ваша программа расположена в какомто каталоге. то не мешалобы сделать проверку на присутствие каталога непосредственно на диске, хотя это и не обязательно см. абзац выше. А то, что, там ввел руками, удалил лиспом, попытался подсунуть несуществуючий это все ерунда. Если каталог есть на диске то проблем никаких не будет и все будет работать как надо. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Ой, не надо мне рассказывать, как писать программы. Разумеется, все что надо есть - и проверка профилей, и проверка каталогов, и их создание и прочее.
Сама проблема выявилась потому, что у меня есть специальная хитрющая дамочка, которой поручено строить всякие пакости с целью тестирования. Вот она и сумела создать ситуацию, когда после проверки каталогов меняется алгоритм их определения. Достаточно хитрым для дамочек, но допустимым способом (рассказывать не буду) Здесь я просил только проверить на разных версиях функции get и put. По идее, одна (put) должна строку создать и записать куда положено, а вторая (get) должна строку прочитать. Проверка существования каталога - не их компетенция. Это делается на другом уровне. Например, в диалоговом окне при вводе несуществующего каталога выдается запрос. А если подтвердил, то он записывается, и это логично. Запрос - на уровне программы (команды), а запись - на уровне функции. Если предположить, что нельзя в путях иметь несуществующий каталог, то тогда и put не должна его записывать. Но это должно быть документировано. В документации ограничений нет, да и put добавляет хоть что. А уж для get вообще не ее собачье дело что-то решать. Она должна вернуть то, что записано. Иначе как же сделать проверку на ошибочные каталоги? В настройках-то они есть, а выявить можно только визуально или нештатными методами. А надо бы штатными. |
|||
![]() |
|
||||
webcad.pro Регистрация: 06.01.2005
Московская обл.
Сообщений: 501
|
А будет ли работоспособна следующая конструкция. Допустим я пожелаю для единообразия работы на разных компьютерах поместить некоторые данные (личный файл меню допустим) на съемный диск. Далее установлю на каждом компьютере первым из путей поиска этот диск с той целью, чтобы нужные файлы “цеплялись” автоматом. Так вот вопрос: будут ли сохраняться пути при загрузке в отсутствии диска (а следовательно и путей к нему) и будут ли при последующей загрузке, когда диск на месте, цепляться нужные файлы?
|
|||
![]() |
|
||||
Программист широкого профиля. Регистрация: 08.09.2005
Челябинск
Сообщений: 722
|
ShaggyDoc Может быть у вас программа только что иделает как создает и удаляет каталоги. но если придраться к путям поддержки, то зачем нужен путь без каталога, он не несет никакой функции. Если собрались добавить путь, то предварительно создайте каталог, если решили удалить каталог удалите путь и буде вам счастье.
AY фвтокад может записывать пути на несуществующие каталоги, и если вы воткнете флешку с файлом, то каталог станет рабочим, но возможно придется перезапустить автокад или перезагрузить меню тк меню грузится только при загрузке и командой mnuload. Также имя диска в путях указывается конкретно A: B: G: Если у вас прописано G:\support, а вы сунули левую флешку, а в другое гнездо флешку с нужным файлом, то обратите внимание какой диск какую букву получил. Я это так понимаю. Скорее всего добавление несуществующих путей для этого и сделано |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Такой путь прописан в профиле. И в момент инициализации надо проверить наличие пути в профиле, физическое наличие, и если нет, то что-то сделать. В том числе, возможно, заменить "битые" дорожки на другие. Тут разные варианты, например, использование как резерва, папки с локального компьютера. Для этого и необходимо получение полного списка путей. А уж что с ним делать - должна решать программа, а не функция, назначение которой всего лишь вернуть строку. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Мое маленькое исследование.
Пишем функцию, добавляющую путь к имеющемуся списку путей поддержки: Код:
Цитата:
Удаляем вручную добавленный путь. Пытаемся добавить путь к несуществующему каталогу и получаем следующий результат: Цитата:
При этом добавленный путь появился только в узле "Support File Search Path и не появился в узле "Working Support File Search Path". Вывод: Отсутствие каталога, путь к которому регистрируется, может приводить (а может и всегда гарантированно приводит) к последующему неправильному результату при чтении. |
|||
![]() |
|
||||
это только кличка Регистрация: 22.10.2006
Москва
Сообщений: 252
|
Поправлю сам себя.
Думаю, что vla-get-supportpath всегда возвращает правильный результат, а именно пути, присутствующие в узле "Working Support File Search Path"! Т.е. реально существующие на текущий момент пути поддержки. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Так как тема вызвала интерес, сообщаю подробности - может кому-то пригодится для предотвращения своих ошибок. В системе ruCAD для каждого нового пользователя создается профиль и специальные папки, которые надо включать в SupportPath. Некоторые файлы используются со всеми версиями Автокада, некоторые - для каждой версии. В связи с появляющейся несовместимостью форматов пришлось делать подкаталоги и с точкой (R16.1, R16.2 и т.д). Для формирования конкретных путей используется специальный шаблон файла acaddoc.lsp. В этот шаблон продвинутый пользователь может вписать и то, что ему лично нужно - например, подгрузку каких-то собственных программ. В шаблоне есть строки наподобие Код:
на значения соответствующих переменных - в результате будет конкретный путь для пользователя (у всех может быть разный в зависимости от настроек Windows). Таким образом работают около 1000 пользователей. Но одной вредной особе (она здесь иногда ошивается) был сделан "специальный билд", в котором появились кое-какие изменения. В инсталляцию случайно попала неправильная версия шаблона. В результате стали возникать ошибки, которых могло бы не быть, если бы vla-get-supportpath возвращала то, что от нее ожидалось. Или если бы она была правильно документирована. Найти виновницу оказалось нелегко, так как внешние признаки ошибки казалось бы не имели к этому месту никакого отношения. |
|||
![]() |