Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка при загрузке окна диалога. Как побороть?

Ошибка при загрузке окна диалога. Как побороть?

Ответ
Поиск в этой теме
Непрочитано 07.02.2018, 14:46 #1
Ошибка при загрузке окна диалога. Как побороть?
AlexSheep
 
Москва
Регистрация: 08.09.2010
Сообщений: 28

Добрый день!
Есть функция по созданию окна диалога из временного файла (взял у LM)
Код:
[Выделить все]
 (defun sks:PopupList (title data / file tmp dch return)
  (cond
    (
     (not
       (and
	 (setq
	   file	(open (setq tmp (vl-filename-mktemp nil nil ".dcl"))
		      "w"
		) ;_ end of open
	 ) ;_ end of setq
	 (write-line
	   (strcat
	     "PopupList : dialog { label = \""
	     title
	     "\";"
	     ": popup_list { key = \"plst_Layers\"; label = \"Выберите:\"; fixed_width = false; }"
	     "spacer; ok_cancel;}"
	    ) ;_ end of strcat
 ;_ end of strcat
 ;_ end of strcat
	   file
	 ) ;_ end of write-line
	 (not (close file))
	 (< 0 (setq dch (load_dialog tmp)))
	 (new_dialog "PopupList" dch)
       ) ;_ end of and
     ) ;_ end of not
    )
    (
     t
     (start_list "plst_Layers")
     (mapcar 'add_list data)
     (end_list)

     (setq return (set_tile "plst_Layers" "0"))
     (action_tile "plst_Layers" "(setq return $value)")
     (action_tile "accept" "(done_dialog 1)")

     (setq return
	    (if	(= 1 (start_dialog))
	      (mapcar '(lambda (x) (nth x data))
		      (read (strcat "(" return ")"))
	      ) ;_ end of mapcar
	      nil
	    ) ;_ end of if
     ) ;_ end of setq
    )
  ) ;_ end of cond

  (if (< 0 dch)
    (unload_dialog dch)
  ) ;_ end of if
  (if (setq tmp (findfile tmp))
    (vl-file-delete tmp)
  ) ;_ end of if

  return
)
для удобства чтения временный DCL-файл выглядит так:
PopupList : dialog
{
label = "Выберите";
: popup_list
{ key = "plst_Layers";
label = "Выберите:";
fixed_width = false;
}
spacer;
ok_cancel;
}

на всех компьютерах (штук 10) код срабатывает нормально, кроме одного (Win10, AutoCAD 2016). Вылетает ошибка "Ошибка в файле диалога "C:\Users\123\AppData\Local\Temp\$VL~~00o.dcl", строка 1: внимание: неопределенный объект. Символ: "PopupList"".
Как так? Да, символ неопределен. Я его и определяю.
Подумал что, возможно, имя диалога пересекается с каким-нибудь другим. Добавил 1 к имени - "PopupList1". В итоге получил "ошибка: Возникло исключение: 0xC0000005 (Нарушение доступа)".
Что это? У AutocCADа нет доступа к папке temp? Подскажите, пожалуйста, как побороть эту ошибку.
Просмотров: 3229
 
Непрочитано 07.02.2018, 14:53
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Проверь файл base.dcl в каталогах AutoCAD
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.02.2018, 17:34
#3
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


В base.dcl ничего похожего на PopupList нет.
AlexSheep вне форума  
 
Непрочитано 07.02.2018, 17:38
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


А ты свой никакой "определитель" случайно не предоставлял? Потому что в штатном dcl, насколько я помню, есть :popup_list, но не :popuplist.

----- добавлено через ~4 мин. -----
Тьфу, запутал... Тогда не знаю.
Я бы все же записывал в dcl через цикл, чтобы уж точно знать - каждый элемент гарантированно в своей строке. Потому что, если я не ошибаюсь, у тебя dcl должен выглядеть так:
Код:
[Выделить все]
PopupList : dialog{label = "Выберите";: popup_list{ key = "plst_Layers";label = "Выберите:";fixed_width = false;}spacer;ok_cancel;}
----- добавлено через ~4 мин. -----
Кстати, а на spacer разве необязательно задавать параметры?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.02.2018, 19:20
#5
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 463


Добрый день.

А параметр типа

list = "";

для

Код:
точно не пропущен?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 08.02.2018, 21:23
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Да он вроде бы необязателен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2018, 10:25
#7
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


Странно что на остальных "подопытных кроликах" эта конструкция работает без проблем... и со spacer без параметров и без параметра list для popup_list... В редакторе Lisp можно просмотреть через Сервис->Инструменты интерфейса->Просмотр DCL из редактора
AlexSheep вне форума  
 
Непрочитано 09.02.2018, 10:43
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


я вообще не понимаю, что так на лиспе в эти формируемые на лету диалоги вцепились - вместо статичных файлов диалогов...
Сергей812 вне форума  
 
Непрочитано 09.02.2018, 12:33
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Предоставлять проще, компилировать можно функциями lisp (а vlx только руками), динамически можно поменять количество контролов и еще до фига плюсов. Сугубо ИМХО, как обычно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2018, 13:58
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Предоставлять проще, компилировать можно функциями lisp (а vlx только руками), динамически можно поменять количество контролов и еще до фига плюсов.
только с последним согласен однозначно. Распространение - в случае внутрикорпоративного софта (судя по ветке) это не столь актуально, а в лиспе код создания диалогов тоже сам себя не напишет)
Сергей812 вне форума  
 
Непрочитано 09.02.2018, 14:13
| 1 #11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,832


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а в лиспе код создания диалогов тоже сам себя не напишет)
Ты не поверишь - код вообще сам себя не напишет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ошибка при загрузке окна диалога. Как побороть?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание листов и видовых экранов на них Andrey_13 Готовые программы 423 03.04.2024 21:27
ошибка при загрузке, пишет: ... В экземпляре объекта не задана ссылка на объект. как исправить помогите? de3-2007 AutoCAD 9 25.06.2012 19:07
Помогите узнать номер строки в котрой произошла ошибка в программе на VBA МишаИнженер Программирование 3 27.05.2012 23:27
Фатальная ошибка при загрузке слоев Kate-Perm AutoCAD 23 21.07.2011 10:47
Ошибка винды при загрузке память не может быть read dextron3 Прочее. Программное обеспечение 7 18.09.2008 19:36