Работа с модулями в FPC, не подключаются модули :( |
Работа с модулями в FPC, не подключаются модули :( |
forscripts |
17.12.2007 20:16
Сообщение
#1
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Дана программа, генерирующая также определенные программы на Паскале (подробнее fastproger.moy.su)
Однако, вес этой программы ранее составлял около 64 кб в одном файле, и Борланд Паскаль, который я использовал, не тянул компилить файлы весом более 64 кб с чем-то там. В общем, я решил перейти на модульную основу, однако ни в Турбо Паскале, ни в ФриПаскале наладить подключение модулей не смог. В Турбо инициализация модуля проходила, но компилятор зависал на подключении процедур, написав, что не знает, откуда эта процедура (unknown identifier) В ФриПаскале модули вообще не подключаются - пишет, что не может их найти. Модули лежат в одной папке с компилируемым файлом. Полная версия программы в архиве, тут - начало самой программы и исходник одного из модулей.
Как все-таки подключить эти модули?.. Заранее спасибо за помощь. Прикрепленные файлы fastproger.rar ( 77.47 килобайт ) Кол-во скачиваний: 229 |
volvo |
17.12.2007 20:29
Сообщение
#2
|
Гость |
Цитата Модули лежат в одной папке с компилируемым файлом. Не вижу... В одной папке с компилируемым файлом лежат файлы TPU, они не являются модулями для FPC... Этот компилятор работает с файлами PPU... Перекомпилируй все модули с помощью FPC, забрось PPU файлы в одну папку с исходником (или пропиши путь в Options -> Directories -> Units), и исправляй ошибки в программе. Но модули подключатся... |
andriano |
17.12.2007 21:01
Сообщение
#3
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Посмотрел на приведенный модль.
У него пустые раздел интерфейса и инициализации. Другими словами, модуль совершенно бесполезен. Если хочешь пользоваться роцедурами из модуля вне его, надо поместить их заголовки в разделе интерфейса. т.е: unit fpg_id1; |
forscripts |
17.12.2007 23:07
Сообщение
#4
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Какой же я лох)))
Спасибо большое, думаю, все заработает. |
forscripts |
18.12.2007 0:07
Сообщение
#5
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
И все равно не работает...
Все процедуры подправлены, программа даже компилируется, но корректно использовать ни одну из процедур не может... Новая версия в архиве... (выкладывать весь текст основной программы нецелесообразно, там 24 кб) Прикрепленные файлы fastproger.rar ( 225.36 килобайт ) Кол-во скачиваний: 226 |
volvo |
18.12.2007 0:37
Сообщение
#6
|
Гость |
Программа не только компилируется, но и запускается (если ее пересобрать. Я не знаю, с какими опциями ты компилировал модули, но с ними ни одна процедура не запустилась. После копирования исходников всех модулей в папку с основной программой и полного ребилда процедуры из модулей начали вызываться). А работает неправильно - потому что (возьмем к примеру первый твой модуль):
unit fpg_id1; А кто будет инициализировать (имя файла я для чего вводил в начале - непонятно)? Тебя ж предупредили: Цитата(Error Log) fpg_id1.pas(7,17) Warning: Local variable "t" does not seem to be initialized На Warning-и не обращаешь внимания? Напрасно...fpg_id1.pas(13,4) Warning: Local variable "p" does not seem to be initialized fpg_id1.pas(15,4) Warning: Local variable "o" does not seem to be initialized |
forscripts |
18.12.2007 20:06
Сообщение
#7
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
volvo,
1) Компилировал ФриПаскалем, обычным способом... 2) Никаких предупреждений не выскакивало, мб я слепой(( 3) Насчет переменной t - не прав, эта переменная действительно описывается только в основной программе, надо бы из var-a перенести ее в скобки за procedure... 4) Насчет инициализации не понял, т.к. что прошлый вариант я исправил, и в interface название процедуры вставил. |
volvo |
18.12.2007 20:39
Сообщение
#8
|
Гость |
Цитата 2) Никаких предупреждений не выскакивало, мб я слепой(( Может, включить забыл? Зайди Options -> Compiler -> Verbose и отметь Warnings, Notes, Hints как минимум. Тогда будешь получать все, что отмечено. После компиляции жмешь на F12 и смотришь список предупреждений/хинтов/замечаний.Цитата 4) Насчет инициализации не понял, т.к. что прошлый вариант я исправил, и в interface название процедуры вставил. Я не про эту инициализацию... У тебя есть строка, и перед использованием (скажем так, перед использованием в качестве RValue, справа от знака присваивания) она должна быть инициализирована. Иначе будешь получать глюки в программе. А у тебя ни один из тех четырех String-ов не был инициализирован. Исправляй... Кстати, три из них должны передаваться из основной программы.Самый простой путь сделать это, не перелопачивая все 55 модулей - это добавить еще один, маленький, юнит: unit my_globals;, подключить его в Uses первым, а описания переменных o, p, id и t из основной программы убрать... |
forscripts |
18.12.2007 23:53
Сообщение
#9
|
Группа: Пользователи Сообщений: 8 Пол: Мужской Репутация: 0 |
Cпасибо за помощь...
Уведомления у меня включены, но варнинги как раз нет)) Не знаю, чего я так сглупил, мб просто мышкой промахнулся. По переменным разберусь, действительно ошибся... Единственное что, можешь подробнее объяснить, какие должны определяться в программе, а какие - передаваться? Создавать модуль global, пожалуй, не буду, т.к. имхо слишком геморрно, лучше уж все процедурки подправить - их там всего 60)))) А по переменным... Вот "о" - это функция, которая вводится с клавиатуры в самом интерфейсе программы, не знаю, как ее можно описать в модуле. "р" - апостроф, там все понятно, его надо совать в сам модуль. Самая большая проблема, я так понял, с "t", так как файл с правильным именем не генерируется. Но как можно запихнуть в модуль эту переменную, если она тоже вводится с клавиатуры в основной программе? (это имя файла, в программе есть кусок кода для него: writeln('vvedite imya faila, v kotoriy budet sgenerirovana programma');) Что касается "id", то там, в общем, все понятно, определить ее можно и в программе, и в модуле... Сообщение отредактировано: forscripts - 18.12.2007 23:58 |
Текстовая версия | 23.09.2024 3:01 |