:: Visual Foxpro, Foxpro for DOS
Ошибки при сборке exe-модуля
lili
Автор

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Приветствую всех!
В проекте SetMain - меню MainMenu. В MainManu.mpr прописала все установки SET и публичные переменные. При отладке все работает. При попытке собрать проект выходит ошибка, что эти переменные не найдены (в процедурах, где они используются). В чем тут подвох?
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
При попытке собрать проект выходит ошибка, что эти переменные не найдены (в процедурах, где они используются). В чем тут подвох?
Первый раз слышу, что при сборке EXE может появиться ошибка №12 - не представляю, как в этот момент такое можно знать.
Видимо, описание проблемы не совсем точно отражает её суть.

Хотел бы увидеть реальный код определения переменной в *.mpr, ту команду в процедуре, которая "валит" сборку EXE и дословный текст ошибки.

Если же речь не о "попытке собрать", а всё же о работе программы в виде EXE, то я бы посоветовал убедиться, что в EXE попадает именно тот вариант Mainmenu, который работает в исходниках, а также, что определение PUBLIC переменной действительно происходит ранее, чем она используется где-то еще.
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
lili
Автор

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
Да мне тут подкинули проект ушедшего работника. Похоже, в проекте действительно чего-то не хватает.
Поспешила я в форум обратиться. Буду еще копать проект.
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
Дмитрий Петров

Сообщений: 3071
Откуда: Пермь
Дата регистрации: 09.07.2001
В MainManu.mpr прописала все установки SET и публичные переменные

Лиля, обращаться в форум никогда не поздно)
Тут насоветуют
А зачем в менюху то писать set настройки?
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
Burn

Сообщений: 5644
Откуда: Днепр
Дата регистрации: 02.01.2002
Попробовать описать их в модуле через EXTERNAL
Бывает помогает.
А ваще - если собранный экзешник работает - забить
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
akvvohinc
Цитата:
При попытке собрать проект выходит ошибка, что эти переменные не найдены (в процедурах, где они используются). В чем тут подвох?
Первый раз слышу, что при сборке EXE может появиться ошибка №12 - не представляю, как в этот момент такое можно знать.
Видимо, описание проблемы не совсем точно отражает её суть.

DIMENSION MyArray(10,10)
MyArray=1
?MyArray[1,1]
=MyFunc(@MyArray)
?MyArray[1,1]
FUNCTION MyFunc
LPARAMETERS taArray
* Будет ошибка "Unable to find unknown taArray" при компиляции
* Для ее исправления надо написать вот такую команду, как указание компилятору, что массив был объявлен ранее
* EXTERNAL ARRAY taArray
taArray[1,1]=2
RETURN

Обычно такая ошибка именно с массивами, но возможны и с другими объектами. Это именно ошибка компиляции, а не выполнения.

Если речь идет о глобальных переменных которые используются "как есть" (не параметр), то как альтернативное решение - просто объявить эти переменные перед компиляцией. Выполнить тот кусок кода, где объявляются все PUBLIC-переменные, чтобы их определение было в памяти. После этого запустить сборку проекта
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
lili
Автор

Сообщений: 436
Откуда: Сыктывкар
Дата регистрации: 07.11.2005
* Для ее исправления надо написать вот такую команду, как указание компилятору, что массив был объявлен ранее
* EXTERNAL ARRAY taArray

Спасибо за подсказку, разобралась, все получилось.
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> При попытке собрать проект выходит ошибка, что эти переменные не найдены (в процедурах, где они используются). В чем тут подвох?
Массивы потому-то в фоксе, их раньше (в времена ДОС не было), поэтому для них в фоксе даже изобрели особый тип - "A" (если измерять тип переменной конструкцией TYPE(имя_массива, 1) - если возвращает "A", то эта переменная не простая, она массив ) Не загружаю

Доб. Фокс, компилятор файла PRG, если есть обращение к элементу массива (типа МАСС[1]) он ищет определение массива в файе. Если в компилируемом файле нет определения массива (DIMEM, или EXTER ARRAY), то компилятор ругается, милая его особенность, 10-20-летней давности

Фокс иногдг выбешивает, он при 1Г сети должен сделать за минуту, жду... пистя
болтая... Вижу, что фокс общается с БД на скорости 10 МБит!Продаться Чену, что ли... Вдруг он эту и скорость запилил...



Исправлено 3 раз(а). Последнее : of63, 02.03.23 22:01
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Владимир Максимов
Обычно такая ошибка именно с массивами, но возможны и с другими объектами.
Как таковые массивы здесь ни при чём (как и другие конкретные объекты).

Только автор программы знает (или догадывается ), что под ARRAY[1] он имел в виду обращение к элементу массива, но компилятору Фокса это неведомо.
И только в Run-time станет понятно, что будет выполняться - обращение к элементу массива или вызов одноимённой функции - компилятор же создаёт одинаковый объектный код в обоих случаях.

А поэтому при компиляции речь не может идти о том, что какая-то переменная, массив или что-то ещё не найдено.
В оригинале это сообщение (не ошибка, а скорее предупреждение!) звучит так:
Unknown ARRAY1 - Undefined (это в ERR-файле)
Unable to find Unknown ARRAY1 (это в сообщении на экране)

Как видите, речь здесь не идет ни о переменной, ни о массиве, ни о чем-либо ещё конкретном - просто о некотором неизвестном имени.
Поэтому это даже ошибкой назвать нельзя - если ARRAY[1] будет существовать в Run-time, то программа исполнится нормально.

Владимир Максимов
Для ее исправления надо написать вот такую команду, как указание компилятору, что массив был объявлен ранее
Как комментарий к программе - сойдёт.
Но формально это не совсем точно.

Это лишь указание компилятору, что автор понимает, что указанное неизвестное компилятору имя автору известно.
Компилятору же от этого знания ни тепло, ни холодно - объектный код будет одинаковым, что с этой командой, что без неё, а поэтому, чем на самом деле окажется данное имя в Run-time, неважно.

То же касается и фразы "объявлен ранее".
Эта фраза может иметь смысл лишь в Run-time, а на этапе компиляции (в качестве указания компилятору) не значит ничего.



Исправлено 2 раз(а). Последнее : akvvohinc, 03.03.23 00:42
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
of63
компилятор файла PRG, если есть обращение к элементу массива (типа МАСС[1]) он ищет определение массива в файле. Если в компилируемом файле нет определения массива (DIMEN, или EXTER ARRAY), то компилятор ругается
Тоже не совсем так.
Компилятор ищет в этом PRG что-то, что помогло бы ему понять, что автор понимает, что такое МАСС[1].

А поэтому ему будет достаточно не только DIMENSION МАСС[n], но и функции с именем МАСС в этом PRG.
Но, как я написал выше, компилятору без разницы, что на самом деле скрывается под МАСС - массив или функция.
Более того, в Run-time один и тот же код (команда) в одном случае может выполниться как обращение к элементу массива, а в другом - как вызов одноименной функции.

То же можно сказать и о команде EXTERNAL ARRAY.
Ею удобно пользоваться не только для массивов, определённых где-то ещё, но и для функций, которые будут подключены к приложению лишь в рантайме.
Главное, чтобы сейчас компилятор перестал возмущаться на неизвестное имя, чем бы оно не оказалось при исполнении.
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Burn
А ваще - если собранный экзешник работает - забить
В принципе это так и есть - работать будет.
Но если не поправить, то при каждой сборке будет появляться этот диалог, и придется постоянно игнорить.



Исправлено 1 раз(а). Последнее : akvvohinc, 03.03.23 01:52
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
То же можно сказать и о команде EXTERNAL ARRAY.
Ею удобно пользоваться не только для массивов, определённых где-то ещё, но и для функций, которые будут подключены к приложению лишь в рантайме.
Главное, чтобы сейчас компилятор перестал возмущаться
Просто для примера на тему. У меня куча функций создаётся самим приложением в процессе работы – их содержимое зависит от настроек конкретного экземпляра. А чтобы не париться с EXTERNAL, сделал Unknowns.prg, включил его как excluded в проект, а в нём просто список «внешнего», что вызывается из проекта, в виде:
func OrgName
func LibVersion
func DbId
dime MaleKins(1), FemaleKins(1)
Всё хранится в одном месте, легче контролировать и вспоминать чего кого.
Ну и другой вариант. Можно на всё плюнуть и вызывать так: v = Evaluate("DbId()")
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
of63
Массивы потому-то в фоксе, их раньше (в времена ДОС не было),
Батенька, не вводи народ в заблуждение рассказывая сказки про отсутствие массивов ДОС.
[attachment 36502 2023-03-03090201.png]


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/2 positive
Re: Ошибки при сборке exe-модуля
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
А чтобы не париться с EXTERNAL, сделал Unknowns.prg, включил его как excluded в проект, а в нём просто список «внешнего»
Хороший способ.
Моё руководство до этого не додумалось, а я к ним пришел "на всё готовое" и думать о таких "мелочах" уже не пришлось.

На это годится, я думаю, только для функций - массивам помочь не должно.
Точнее - надо массив описать как функцию. В вашем примере вместо:
dime MaleKins(1), FemaleKins(1)
надо написать
FUNCTION MaleKins
FUNCTION FemaleKins

и тогда, если в каких-то программах будет написано MaleKins[1], компилятор найдет функцию с этим именем, и сообщения не будет.



Исправлено 3 раз(а). Последнее : akvvohinc, 03.03.23 14:54
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ssa
of63
Массивы потому-то в фоксе, их раньше (в времена ДОС не было),
Батенька, не вводи народ в заблуждение рассказывая сказки про отсутствие массивов ДОС.
[attachment 36502 2023-03-03090201.png]

Не было массивов когда-то.. или я их не знал, конечно, хз, в сознательной памяти версии 2.0 и выше (не 1.Х). Что-то читал в литературе тех времен, что добавили "понятие массив". Соглашусь, что понятие "массив" - вечно, и бывает всегда, во всех ЯП )

Доб. Про версии Fox, конечно, а не про Дос



Исправлено 1 раз(а). Последнее : of63, 04.03.23 02:51
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Не было массивов когда-то.. или я их не знал, конечно, хз, в сознательной памяти версии 2.0 и выше (не 1.Х). Что-то читал в литературе тех времен, что добавили "понятие массив".
Я начинал работать с Фоксом с версии Multi-User FoxBASE+ 2.10 1988 года (то есть до первой версии FoxPro и до Microsoft'а) - уже в ней были массивы.
Знаю, что была ещё версия FoxBASE+ 2.00 1987 года - про неё ничего сказать не могу - не работал, но при желании можно проверить - эта версия есть в сети.
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
of63
Не было массивов когда-то.. или я их не знал, конечно, хз, в сознательной памяти версии 2.0 и выше (не 1.Х). Что-то читал в литературе тех времен, что добавили "понятие массив".
Массивы в фоксе появились очень давно. Я показал картинку из версии 2.
Цитата:
Соглашусь, что понятие "массив" - вечно, и бывает всегда, во всех ЯП )
Не во всех. Например, в T-SQL вообще нет такого понятия.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() Да? Знаю только о наличии этого ЯП, книжки "читал"... Сама таблица, результат, оператор SELECT - возвращает таблицу, массив... наверное, вопрос терминологии, что есть "упорядоченный набор данных" (скалярных величин)
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
sphinx

Сообщений: 31184
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Это курсор. В фоксе же есть разница - массив и курсор. Олег, с чем сейчас воюем? Еще скажи, что Алексеевич не прав.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Ошибки при сборке exe-модуля
sphinx

Сообщений: 31184
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
of63
SELECT - возвращает таблицу, массив

А методы доступа к таблице/курсору и массиву точно одни? Нет разницы?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика