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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как обеспечить одновременную работу ObjectDBX и чтение/запись в текстовый файл?

Как обеспечить одновременную работу ObjectDBX и чтение/запись в текстовый файл?

Ответ
Поиск в этой теме
Непрочитано 23.03.2020, 13:41 #1
Как обеспечить одновременную работу ObjectDBX и чтение/запись в текстовый файл?
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 37,455

Всем доброго!
Столкнулся с не очень понятной ситуацией. В конструкции вида
Код:
[Выделить все]
 (setq odbx   (vla-getinterfaceobject (vlax-get-acad-object)
                                     (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "acadver"))))
                                     ) ;_ end of vla-getinterfaceobject
      file   "c:\\test.txt"
      handle (open file "r")
      ) ;_ end of setq
(while (setq str (read-line handle))
       ;; Что-то пытаемся сделать
 ) ;_ end of while
Внутри цикла указатель на ObjectDBX постоянно "обнуляется". Как будто для него было выполнено vlax-release-object. Я понимаю, что можно считать файл в список и потом его уже обрабатывать, но хотелось бы понять - можно ли как-то обойти обнуление интерфейса?
ACAD2013x64, другие версии, к сожалению, не покатят
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 1022
 
Непрочитано 23.03.2020, 14:33
#2
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 284


А что делаешь в цикле? Понятно, что обращаешься в odbx, но как-для-чего? И на более свежих та же конструкция работает?
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 23.03.2020, 16:39
#3
Кулик Алексей aka kpblc
Moderator

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


Да там огромный список файлов dwg, которые надо обрабатывать: открыть, поудалять, поменять некоторые настройки тех же слоев, сохранить... По условиям задачи самая последняя версия именно 2013, поставить "посвежее" не получится.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2020, 19:40
#4
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


А родная axdb рабочей версии автокада (кстати, как ее зовут в 2013 автокаде) зарегистрирована?
P_S вне форума  
 
Автор темы   Непрочитано 23.03.2020, 20:41
#5
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от P_S Посмотреть сообщение
А родная axdb рабочей версии автокада (кстати, как ее зовут в 2013 автокаде) зарегистрирована?
Вот с этого момента поподробнее, пожалуйста.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2020, 21:13
#6
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Я имею в виду, что источник бед - GUID какой-то другой версии dll. Соответственно, надо проделать dllunregister, потом dllregister, указав на нужную axdb(индекс?).dll
P_S вне форума  
 
Автор темы   Непрочитано 23.03.2020, 21:20
#7
Кулик Алексей aka kpblc
Moderator

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


На машине из AutoCAD'ов установлен только 2013, ничего другого нет и не было. Проверю на клоне, конечно...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.03.2020, 11:00
#8
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 284


А указатель ObjectDBX освобождается не при закрытии ли чертежа, который открыт через этот указатель ObjectDBX?
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 24.03.2020, 11:43
#9
Кулик Алексей aka kpblc
Moderator

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


Нет, увы. Документ корректно сохраняется и релизится, указатель на интерфейс обнуляется именно при чтении следующей строки
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.03.2020, 15:32
#10
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 284


Интересный эффект. Я прошу прощения, а если читать пару строк в цикле, при чтении второй строки будет освобождаться или освобождается именно на итерации. Мне кажется - дело в интерпретации в код. Сам не могу посмотреть, 2013 уже года три как нет - текущая и три версии назад ибо
Offtop: Ну-уу, как костыль - после чтения очередной строки из файла получать указатель, по окончании работы с файлом - освобождать.
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 24.03.2020, 15:40
#11
Кулик Алексей aka kpblc
Moderator

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


Костыль не понял. Ты имеешь в виду внутри цикла проверять, не обнулился ли указатель на интерфейс? Пробовал, память утекает как вода через решето. А обрабатывать надо порядка 350 000 файлов dwg
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.03.2020, 15:45
#12
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 284


Нет, внутри цикла получать-освобождать указатель: читаешь очередную строку (я так понимаю - путь к файлу), получаешь указатель указатель интефейса, работаешь с файлом, сохраняешь-закрываешь, релизишь указатель, gc
В качестве оптимизации: (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "acadver")))) связываешь с переменной до начала цикла.
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 24.03.2020, 15:53
#13
Кулик Алексей aka kpblc
Moderator

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


И так пробовал. Память, зараза, не освобождается моментально, а (gc) внутри цикла никакого эффекта не дает. Можно, конечно, попробовать написать внешнюю функцию по обработке файла, которую и вызывать внутри цикла. В функции релизить указатели, а (gc) делать внутри цикла.
Попробую, посмотрю, что получится - и получится ли вообще.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как обеспечить одновременную работу ObjectDBX и чтение/запись в текстовый файл?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт наборов печати в пространства модели в текстовый файл allar8 Программирование 18 01.09.2017 14:34
Как сформировать текстовый файл для Robot? evthisrel Robot 1 16.05.2017 18:57
Программно получить список системных переменных (без вывода в текстовый файл) Ax3 Программирование 3 27.12.2010 16:29
Извлечение координат точек кривых в текстовый файл Pollcher AutoCAD 2 20.04.2010 12:15
Текстовый файл исходных данных процессора ПК Лира ЛАО Лира / Лира-САПР 9 21.01.2010 14:26