Ошибки при сборке exe-модуля | |
---|---|
lili Автор Сообщений: 428 Откуда: Сыктывкар Дата регистрации: 07.11.2005 |
Приветствую всех!
В проекте SetMain - меню MainMenu. В MainManu.mpr прописала все установки SET и публичные переменные. При отладке все работает. При попытке собрать проект выходит ошибка, что эти переменные не найдены (в процедурах, где они используются). В чем тут подвох? ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Первый раз слышу, что при сборке EXE может появиться ошибка №12 - не представляю, как в этот момент такое можно знать. ![]() Видимо, описание проблемы не совсем точно отражает её суть. Хотел бы увидеть реальный код определения переменной в *.mpr, ту команду в процедуре, которая "валит" сборку EXE и дословный текст ошибки. Если же речь не о "попытке собрать", а всё же о работе программы в виде EXE, то я бы посоветовал убедиться, что в EXE попадает именно тот вариант Mainmenu, который работает в исходниках, а также, что определение PUBLIC переменной действительно происходит ранее, чем она используется где-то еще. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
lili Автор Сообщений: 428 Откуда: Сыктывкар Дата регистрации: 07.11.2005 |
Да мне тут подкинули проект ушедшего работника. Похоже, в проекте действительно чего-то не хватает.
Поспешила я в форум обратиться. Буду еще копать проект. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
Дмитрий Петров Сообщений: 2977 Откуда: Пермь Дата регистрации: 09.07.2001 |
В MainManu.mpr прописала все установки SET и публичные переменные
Лиля, обращаться в форум никогда не поздно) Тут насоветуют ![]() А зачем в менюху то писать set настройки? ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
Burn Сообщений: 5609 Откуда: Днепр Дата регистрации: 02.01.2002 |
Попробовать описать их в модуле через EXTERNAL
Бывает помогает. А ваще - если собранный экзешник работает - забить ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Обычно такая ошибка именно с массивами, но возможны и с другими объектами. Это именно ошибка компиляции, а не выполнения. Если речь идет о глобальных переменных которые используются "как есть" (не параметр), то как альтернативное решение - просто объявить эти переменные перед компиляцией. Выполнить тот кусок кода, где объявляются все PUBLIC-переменные, чтобы их определение было в памяти. После этого запустить сборку проекта ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
lili Автор Сообщений: 428 Откуда: Сыктывкар Дата регистрации: 07.11.2005 |
* Для ее исправления надо написать вот такую команду, как указание компилятору, что массив был объявлен ранее
* EXTERNAL ARRAY taArray Спасибо за подсказку, разобралась, все получилось. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
of63 Сообщений: 24232 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> При попытке собрать проект выходит ошибка, что эти переменные не найдены (в процедурах, где они используются). В чем тут подвох?
Массивы потому-то в фоксе, их раньше (в времена ДОС не было), поэтому для них в фоксе даже изобрели особый тип - "A" (если измерять тип переменной конструкцией TYPE(имя_массива, 1) - если возвращает "A", то эта переменная не простая, она массив ) Не загружаю Доб. Фокс, компилятор файла PRG, если есть обращение к элементу массива (типа МАСС[1]) он ищет определение массива в файе. Если в компилируемом файле нет определения массива (DIMEM, или EXTER ARRAY), то компилятор ругается, милая его особенность, 10-20-летней давности Фокс иногдг выбешивает, он при 1Г сети должен сделать за минуту, жду... болтая... Вижу, что фокс общается с БД на скорости 10 МБит!Продаться Чену, что ли... Вдруг он эту и скорость запилил... Исправлено 3 раз(а). Последнее : of63, 02.03.23 22:01 ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Как таковые массивы здесь ни при чём (как и другие конкретные объекты). Только автор программы знает (или догадывается ![]() И только в 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 ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Тоже не совсем так. Компилятор ищет в этом PRG что-то, что помогло бы ему понять, что автор понимает, что такое МАСС[1]. ![]() А поэтому ему будет достаточно не только DIMENSION МАСС[n], но и функции с именем МАСС в этом PRG. Но, как я написал выше, компилятору без разницы, что на самом деле скрывается под МАСС - массив или функция. Более того, в Run-time один и тот же код (команда) в одном случае может выполниться как обращение к элементу массива, а в другом - как вызов одноименной функции. То же можно сказать и о команде EXTERNAL ARRAY. Ею удобно пользоваться не только для массивов, определённых где-то ещё, но и для функций, которые будут подключены к приложению лишь в рантайме. Главное, чтобы сейчас компилятор перестал возмущаться на неизвестное имя, чем бы оно не оказалось при исполнении. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
В принципе это так и есть - работать будет. Но если не поправить, то при каждой сборке будет появляться этот диалог, и придется постоянно игнорить. Исправлено 1 раз(а). Последнее : akvvohinc, 03.03.23 01:52 ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
andrewk Сообщений: 159 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Просто для примера на тему. У меня куча функций создаётся самим приложением в процессе работы – их содержимое зависит от настроек конкретного экземпляра. А чтобы не париться с EXTERNAL, сделал Unknowns.prg, включил его как excluded в проект, а в нём просто список «внешнего», что вызывается из проекта, в виде:
Ну и другой вариант. Можно на всё плюнуть и вызывать так: v = Evaluate("DbId()") ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
ssa Сообщений: 12922 Откуда: Москва Дата регистрации: 23.03.2005 |
Батенька, не вводи народ в заблуждение рассказывая сказки про отсутствие массивов ДОС. [attachment 36502 2023-03-03090201.png] ------------------ Лень - это неосознанная мудрость. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Хороший способ. Моё руководство до этого не додумалось, а я к ним пришел "на всё готовое" и думать о таких "мелочах" уже не пришлось. ![]() На это годится, я думаю, только для функций - массивам помочь не должно. Точнее - надо массив описать как функцию. В вашем примере вместо: dime MaleKins(1), FemaleKins(1)надо написать FUNCTION MaleKins FUNCTION FemaleKins и тогда, если в каких-то программах будет написано MaleKins[1], компилятор найдет функцию с этим именем, и сообщения не будет. Исправлено 3 раз(а). Последнее : akvvohinc, 03.03.23 14:54 ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
of63 Сообщений: 24232 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Не было массивов когда-то.. или я их не знал, конечно, хз, в сознательной памяти версии 2.0 и выше (не 1.Х). Что-то читал в литературе тех времен, что добавили "понятие массив". Соглашусь, что понятие "массив" - вечно, и бывает всегда, во всех ЯП ) Доб. Про версии Fox, конечно, а не про Дос Исправлено 1 раз(а). Последнее : of63, 04.03.23 02:51 ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
akvvohinc Сообщений: 3916 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Я начинал работать с Фоксом с версии Multi-User FoxBASE+ 2.10 1988 года (то есть до первой версии FoxPro и до Microsoft'а) - уже в ней были массивы. Знаю, что была ещё версия FoxBASE+ 2.00 1987 года - про неё ничего сказать не могу - не работал, но при желании можно проверить - эта версия есть в сети. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
ssa Сообщений: 12922 Откуда: Москва Дата регистрации: 23.03.2005 |
Массивы в фоксе появились очень давно. Я показал картинку из версии 2. Цитата:Не во всех. Например, в T-SQL вообще нет такого понятия. ------------------ Лень - это неосознанная мудрость. ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
of63 Сообщений: 24232 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() Да? Знаю только о наличии этого ЯП, книжки "читал"... Сама таблица, результат, оператор SELECT - возвращает таблицу, массив... наверное, вопрос терминологии, что есть "упорядоченный набор данных" (скалярных величин)
![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
sphinx Сообщений: 30457 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Это курсор. В фоксе же есть разница - массив и курсор. Олег, с чем сейчас воюем? Еще скажи, что Алексеевич не прав.
![]() ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Ошибки при сборке exe-модуля | |
---|---|
sphinx Сообщений: 30457 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
А методы доступа к таблице/курсору и массиву точно одни? Нет разницы? ------------------ "Veni, vidi, vici!"(с) ![]() |
© 2000-2023 Fox Club  |