Проблема в создании 2D чертежа по 3D модели после перестройки

Автор Простой_инженер, 02.06.21, 09:04:40

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Простой_инженер

Какая-то аномалия! Принцип работы программы:

1. При запуске программа подключается/запускает Компас v17, производит поиск открытого нужного файла 3D модели и делает его активным. Если файла такового нет, то программа запускает его по указанному адресу (Это работает)

2. Пользователь вводит необходимые данные, затем нажимает на первую кнопку и программа отправляет данные во внешние переменные 3D модели и перестраивает ее (Работает)

3. Пользователь нажимает вторую кнопку для создания чертежа. Сначала создается и оформляется лист, а затем программа рушится на этапе построения видов, а именно на методе AddStandartViews.

НО! Если пользователь проделает те же действия игнорируя шаг №2, то программа успешно построит виды. КАК ЭТО ВОЗМОЖНО?

Ошибка "Project Project1.exe raised exception class $0000005 with message 'access violation at 0x0040a06e: read of address 0x3feffffc'"

Простой_инженер

02.06.21, 10:03:07 #1 Последнее редактирование: 02.06.21, 10:13:52 от Простой_инженер
Все. Решил проблему. В общем метод выдавал ошибку из-за пути к файлу 3D модели. Путь у меня один и я его присваивал к глобальной переменной типа string в FromCreate. В дальнейшем никаких действий с этой переменной я не производил, а значит путь оставался неизменным, но почему-то программа все равно вылетала. Я решил тогда банально инициировать эту переменную:

var
PathName: string = 'Путь';

И вылеты прекратились. А теперь прошу знатоков, кто знаком с этими тонкостями, объяснить мне почему так вышло?

p3452

Разбирайтесь с областью видимости переменных..!
Судя по вашему описанию:
Цитата: Простой_инженер от 02.06.21, 10:03:07Я решил тогда банально инициировать эту переменную:

var
PathName: string = 'Путь';
вы не "проинициализировали ГЛОБАЛЬНУЮ", а объявили НОВУЮ переменную, с тем же именем (локальную!?)...

Простой_инженер

Цитата: p3452 от 02.06.21, 20:03:17Разбирайтесь с областью видимости переменных..!
Судя по вашему описанию:вы не "проинициализировали ГЛОБАЛЬНУЮ", а объявили НОВУЮ переменную, с тем же именем (локальную!?)...

Неа. Вот прямо сейчас специально вернул все на исходную, чтобы снова проверить.

1. Объявляю ГЛОБАЛЬНУЮ переменную  PathName типа string между var и implementation.
2. В событии FormCreate присваиваю путь к файлу, с которым моя программа будет работать.
3. Далее нажимаю на первую кнопку, чтобы перестроить модель по новыми значениями во внешних переменных.
4. И после перестройки модели нажимаю вторую кнопку, чтобы построить чертеж. И на этапе построения видов программа грохается, выдавая ошибку, которую я указывал выше.

Чтобы убедиться в том, что в моем программном коде отсутствуют локальные переменные с тем же именем, я закомментировал объявленную глобальную переменную и присвоение ему пути в событии FormCreate. Во время компиляции вышла ошибка о не объявленном идентификаторе в методе AddStandartViews.

я возвращаю все на исходную. убираю строку присвоения пути в  FormCreate и присваиваю его в объявлении переменной, т.е. инициирую, и все начинает работать.

еще добавлю, что ВОЗМОЖНО ИМЕЕТ КАКОЕ-ТО ЗНАЧЕНИЕ, ХОТЯ РАНЬШЕ ТАКОГО НЕ ЗАМЕЧАЛ, это то, что метод AddStandartViews вызывается из процедуры, которая объявлена в разделе Private.