| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Ошибка 0xC0000005 (access violation) при импорте свойств динамических блоков
Programming, automation, CADs, GISs. "Теплоком"
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 306
|
||
Просмотров: 9255
|
|
||||
Как временное решение: Вызывай команду _propertiesclose и принудительно закрывай окно свойств
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>>VVA
Пробовал. Закрытое из моей программы окно свойств все равно мешает. То есть надо, чтобы окно свойств было закрыто ДО запуска моей программы. А это сложно. >>Александр Ривилис {исправлено} Если вы имеете в виду вашу программу подсчета площади - то нет, не установлена. PlTools есть, но вряд ли они могут мешать? >>Supermax У меня ход всего процесса отображается (print)-ами. Это не то? Почему в файл? Просто для того, чтобы совершить операции ввода-вывода? Цитата:
Спасибо за отклики!
__________________
На LISPе можно мыслить! Последний раз редактировалось Ax3, 22.10.2010 в 12:40. |
|||
![]() |
|
||||
Ax3, А если сделать так. Делается Команда-обертка, которая будет вызываться пользователями. Она через vla-sendcommand сначала посылает _propertiesclose
потом через Sendcommand твою уже рабочую команду
__________________
Как использовать код на Лиспе читаем здесь |
||||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>> VVA
Спасибо за подсказку. Вариант с (vla-sendcommand) работает. К сожалению, такой вариант не очень хорош для пользователя, но все же лучше, чем Fatal Error в самый разгар работы :-) И все ж таки - должно же быть решение без закрытия окна свойств? P.S. Код:
Код:
P.P.S. {2010.10.27 11.40.25} Хм. Что интересно, если перед запуском цикла импорта значений лукапов окно свойств закрыть "по-пользовательски", то в первый раз импорт отрабатывается все равно с ошибками, второй и далее - нормально. А в варианте с закрытием окна свойств через (vla-sendcommand) цикл отрабатывается без ошибок с первого раза. Но это так, к слову. Только что попробовал использовать (mdelay 100) (функция mdelay использована после загрузки ProgressBars2007.arx, скачал отсюда: http://www.maestrogroup.com.ua/support/ProgressBars.zip) после каждого (vlax-put-property <лукап> 'value <значение>). Не помогает. >> Александр Ривилис. Не могли бы Вы подсказать, что делает функция (mdelay)? В смысле какой/какие методы используются для реализации ожидания? И еще. Благодаря чему ProgressBar решает проблему обработки сообщений кадом во время длительных операций? Что в нем еще такое используется? Какие-то методы объекта Application? Спрашиваю потому, что, может быть, я смогу использовать именно такие методы вместо всего ProgressBar'а? Блин, что это вообще за объект такой - окно свойств? Ни системных переменных с ним никаких не связано, ни программных методов работы с ним никаких нет, непонятно даже, как узнать, открыто оно в данный момент или нет... А то бы остановился на варианте с vla-sendcommand, только после отработки восстанавливал бы окно свойств, если оно было открыто у пользователя. {Добавлено 2010.12.24:} недавно узнал. OPMSTATE
__________________
На LISPе можно мыслить! Последний раз редактировалось Ax3, 24.12.2010 в 11:04. |
|||
![]() |
|
||||
А ты попробуй не закрывать окно свойств, а запускать свои действия через вот это:
http://forum.dwg.ru/showthread.php?t=58328 |
||||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>> Supermax
Ммм... Если я все правильно понял, то я себе на AutoIT уже накатал некое подобное внешнее приложение, осуществляющее вызов лисповой функции в каде через SendCommand (тоже использую COM). Но в данном случае я не вижу разницы между вызовом моего цикла от пользователя и вызовом того же цикла из внешнего приложения. Цикл-то все равно долгий, и от того, откуда он вызван, ситуация, думаю, не меняется. Впрочем, не думаю, а уже проверил - не меняется. Еще раз подчеркну - это если я правильно понял идею твоей программы, Supermax. Подумал о таких вариантах использования внешнего приложения: 1. Вот если бы вызывать именно (vlax-put-property) из внешнего приложения - это, полагаю, помогло бы. Но делать внутри цикла вызов внешнего приложения, которое потом по освобождении када выполняет операции, являющиеся телом цикла - ... думаю, понятно, что не вариант. от 10 до 125 (в зависимости от количества дин.свойств дин.блока) экземпляров внешнего приложения никому не нужны. 2. Организовывать весь цикл во внешнем приложении и уже в нем перед каждым вызовом функции (vlax-put-property) через sencommand ожидать освобождения када - наверно, самый нормальный вариант, но очень не хочется выносить лисповый код (то есть весь алгоритм) в другой язык программирования. И вообще не хочется ковырять кадовские объекты "извне". Слишком уж это подозрительно - перебирать движок через выхлопную трубу... Других вариантов использования внешнего приложения я не придумал. В любом случае, спасибо за отклик! P.S. Кстати, заметил, что иногда (редко) код ошибки не как в заголовке этой темы, а 0xC0000096, описание все то же - access violation
__________________
На LISPе можно мыслить! Последний раз редактировалось Ax3, 27.10.2010 в 15:11. |
|||
![]() |
|
||||
Цитата:
Код:
|
||||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>> Александр Ривилис
Хорошо. Я загрузил ProgressBars2007.arx, но самого прогрессбара не использовал, просто попытался в цикле после каждого (vla-put-property) выполнять (onidleacad 100). Не помогло. Значит ли это, что надо обязательно использовать (отображать) прогрессбар? Или если не помогло - значит не помогло? П.С. Извините за вопросы, просто руки не доходят попробовать.
__________________
На LISPе можно мыслить! |
|||
![]() |
|
||||
Ax3, по-моему ты слегка "заблудился в трех соснах".
1. Читать блок и записывать в него новые значения, а потом опять читать, а окно "свойства" в это время обнавляет свои данные, а ты уже новые значения туда пихаешь - не комильфо! 2. Ты уже чувствуешь, что все твои беды крутятся вокруг командной строки? А почему? А кому она еще нужна? 3. А ты send-command из дочернего процесса вызываешь, из собственного, или из независимого? |
||||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>>Supermax
Ты явно на что-то намекаешь, дружище :-) Вот как я выкрутился по совету VVA. На кнопку, которой пользуется пользователь. повешена функция: Код:
__________________
На LISPе можно мыслить! |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
Лиcпер, выложить блок здесь не могу, потому что он корпоративный, а переделывать долго. Однако щас в личку тебе попытаюсь кинуть.
НО это уже не так важно. --------------------------------------------------------------------- Решение вопроса, похоже, оказалось примитивно простым (только вчера выяснил). Приведенный выше код работал не благодаря (vla-send-command), а благодаря (alert)-у, который - внимание! - снимает выделение с блока. Таким образом, ключом оказалось снятие выделения с блока, видимо, чтобы окно свойств не лезло в него в процессе выполнения импорта свойств. Добавил в свою программу импорта свойств всего одну строчку в начале: Код:
Проверил несколько раз на почти сотне экземпляров своего блока - ошибки не было ни разу. (Каждый раз, когда решение оказывается таким простым, не знаю - радоваться ли его нахождению или печалиться своей тупости... ![]() Всем огромное спасибо за участие! >>VVA похоже, именно твой вариант натолкнул-таки меня правильное решение.
__________________
На LISPе можно мыслить! Последний раз редактировалось Ax3, 24.12.2010 в 09:49. |
|||
![]() |
|
||||
Programming, automation, CADs, GISs. "Теплоком" Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306
|
>>Лиспер
(удалено) Что-то в личке не нашел, как вложения делать, поэтому туда выслал пароль к архиву. Предвидя возможные вопросы, сразу замечу, что без реактора, который я вешаю на этот блок, он почти бесполезен. Реактор занимается "авторегенерацией" блока, изменением цвета и высоты текстов и т.п. Да, никогда не знаешь, без какой мелочи твоя программа будет глючить :-) Тем интереснее, наверно :-) {_2011.03.01_18.17.07} К слову. Обнаружил, что вот этот код: Код:
В AutoCAD 2008 en x86 такой ошибки не возникает, там выдаётся штатная ошибка "; error: Automation Error. Description was not provided."
__________________
На LISPе можно мыслить! Последний раз редактировалось Ax3, 12.03.2011 в 11:21. |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при печати: Unhandled Access Violation Reading 0x0004 Exception at 34674a70h | Major4uk | AutoCAD | 8 | 09.03.2010 15:58 |
Несоответствие результатов в Лире | s.vas | Лира / Лира-САПР | 19 | 11.11.2009 07:31 |
ФАТАЛЬНАЯ ОШИБКА: Unhandled Access Violation Reading 0x8e545c84 Exception at 6352a39eh? | jackalll | Вертикальные решения на базе AutoCAD | 20 | 16.12.2008 13:55 |
Автозагрузка приложения до загрузки чертежа | Ax3 | Программирование | 14 | 15.02.2008 23:29 |
Помощь по Лире | Серега М | Лира / Лира-САПР | 52 | 28.05.2007 02:47 |