Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Технологии модульного програмирования

19K
27 июля 2006 года
A.I.
5 / / 26.07.2006
Добрый день.
В настоящий момент я встретил некоторую проблему с использованием модулей большой вложенности. Связано это с тем, что по какой то причине компилятор запрещает мне ссылать на исходники моих модулей в интерфейсной части другова модуля.
На сколько я понял, ему нужно, что модуль объявляемый в интерфейсной части был уже откомпилирован и находился в каталоге остальных стандартных модулей. Это крайне неудобно.
К примеру, я пишу в отдельном модуле класс динамического списка (массив списочной стрктуры), но для универсальности я не хочу определять тип элементов этого массива в том же модуле, а хочу сослаться на другой модуль, который будет присутствовать в каждом моем приложении и при том в каждом уникален-в нем будут описываться типы данных используемые мною во всем приложении.
Я думаю вы согласитесь со мной, что объявлять выражением uses модуль с типами в модуле с классом массива-списка нужно в интерфейсной части, куда же еще?
Ан нет.
Variant'ы не предлагать. Меня на данный момент интересуют только модули. Технология модульного программирования играют очень большую роль в нашем нелегком деле и я хочу знать о ней все.
Заранее благодарен.
339
28 июля 2006 года
verybadbug
619 / / 12.09.2005
может у тебя просто циклический uses?..... чё компилятор-то говорит?
19K
28 июля 2006 года
A.I.
5 / / 26.07.2006
[QUOTE=verybadbug]может у тебя просто циклический uses?..... чё компилятор-то говорит?[/QUOTE]

[Fatal error] ListUnit_v1_1.pas(5) File not found 'DateTypes.dcu'


"
unit ListUnit_v1_1;

interface

Uses DateTypes in 'C:\Program Files\Borland\Delphi7\Projects\MyUnits\DateTypes.pas'

const
EXPOSURE=2;

Type
TListInfo = cardinal;
...
"
5
28 июля 2006 года
hardcase
4.5K / / 09.08.2005
Гениально. Указал абсолютный путь.
Большей глупости быть не может.

Не надо вообще пути указывать, а если и указывать, то только относительные. Кроме того посмотри в свойствах проекта - там можно указать директории в которых компилер будет искать модули и куда будет сохранять объектные файлы.

Я например сохраняю все модули проекта в папке sources а компилированные dcu или dcil сохраняю в папку obj - очень полезно. И не засоряешь папки разыми файлами.
19K
28 июля 2006 года
A.I.
5 / / 26.07.2006
Вопервых укажи настройки точнее где это можно сделать.
Во-вторых абсолютный путь я вклеил на скоруую руку чтоб в пост закинуть и я не вижу причины почему его нельзя использовать?-это в третьих.
Обычно указываю относительный НО ТОЛЬКО ДЛЯ КРАТКОСТИ! Не имел понятия о их разнице.
Чем относительный путь отличается от абсолютного принципиально?
Вообще удивительно, ты так говоришь, будто принципиальную разницу между абсолютным и относительным путем знают все и о ней трубят на каждом заголовке форумов и в каждой книге. Я лично еще не разу не встречал.
Расскажи побольше о компилированых и некомпилированых модулях.
Точнее о разнице в приподнесении их компилятору.

PS Настройки нашел, спасибо.
5
28 июля 2006 года
hardcase
4.5K / / 09.08.2005
Ок.
Если ты возмёшь свои исходники и попробуешь скомпилировать на моей машине - у тебя ничего не выйдет. У меня нет диска C: и все пути начинаются с G: Кроме того, если ты на своей машине переместишь каталоги, то опятьже не всегда ведь у тебя файло там будет лежать?

Решение - использование относительных путей. Относительными они называются потому как отсчитываются от каталога, в котором лежит файл проекта.

Ещё один минус. Использование конструкции вида
 
Код:
uses MyUnit in '.\sources\MyUnit.pas';

нежелательно тем, что Делфи таким образом помечает модули, которые являются ЧАСТЬЮ проекта - они будут отображаться в дереве проекта в ProjectManager.

Чтобы сказать компилятору, где искать требуемые модули нужно открыть Project -> Options -> Directories/Conditionals -> Search Path
В этом поле можно написать пути (разделённые точкой с запятой ; без кавычек) по которым компилер будет искать модули,если они не окажутся в папке с проектом.
19K
30 июля 2006 года
A.I.
5 / / 26.07.2006
[QUOTE=hardcase]Ок.
Если ты возмёшь свои исходники и попробуешь скомпилировать на моей машине - у тебя ничего не выйдет. У меня нет диска C: и все пути начинаются с G: Кроме того, если ты на своей машине переместишь каталоги, то опятьже не всегда ведь у тебя файло там будет лежать?

Решение - использование относительных путей. Относительными они называются потому как отсчитываются от каталога, в котором лежит файл проекта.
[/QUOTE]
-Для меня бесполезная информация. Все это я знал. Я имел в виду разницу относительного и абсолютного путей для компилятора. Ты в прошлом посте так раскретиковал мое использование абс. бути, что я аш решил, что в этом и ключ всех моих неприятностей с компилером. Теперь я вижу что компилятору все едино. Обычно я использую именно относительный путь, а то, что я на своем посте выложил скопировано на скорую руку из файлового мэнэджера.

Про выражение Uses с указанием пути остались неясности. Ну стал модуль частью проекта и отображаться будет в ProjectManager. Что из этого следует?
Становления модуля частью проекта можно достигнуть так же Shift+F11, не так ли? Я знаю, что после этого добавленный модуль можно выбрать для использования другим модулем (в исполняемой части) из списка "File-Uses->unit..." (Alt+F11), но в чем логика-не ясно. Я ведь могу и напрямую в модуле воткнуть выражение юзес на любой модуль и без "добавленя его в проект".
Иначе говоря, общая картина механизма а так же логика его использования для меня совершенно расплывчата и я не могу задать корректно вопрос.
Расскажи побольше, пожалуйста.
А так же про разницу компилированых и не компилированых модулей, о чем спрашивал в прошлом посте.
Для начала, зачем мне вообще использовать и ссылаться на компилированые модули? Ну в смысле, я знаю, что при отлаживании пошагово, процедуры описаные в компилированом модуле пропускаются как одно целое действие, а не рассматриваются как набор действий, если ты меня понимаешь. Но в чем разница, которая могла бы изменить мое отношение к компилированым и некомпилированым модулям?
339
31 июля 2006 года
verybadbug
619 / / 12.09.2005
а в этой строке и должен быть пробел в расширении? ))))
 
Код:
Uses DateTypes in 'C:\Program Files\Borland\Delphi7\Projects\MyUnits\DateTypes.p as'

-------------------------
а теперь по части ошибки......
File not found 'DateTypes.dcu'
подобные ошибки компилер выдаёт когда не может найти модуль (pas/dcu).... ему впинципе наплевать, чё ты ему даш.... если pas ему дашь - один фиг при компиляции он его в dcu скомпилит..... ))

по части путей....
если ты указываешь абс путь..... и файла там не оказалось - fatal error... и потом пути можно прописывать для юнитов только в dpr если мне память не изменяет.... для pas используются только имена модулей....

как компилер ищет модули
для начала эта умная штука просматривает пути проекта (папку проекта, Project options-Search path).... потом свои пути (Environment options-Library path, Browsing path)... если не находит - Fatal error
19K
31 июля 2006 года
A.I.
5 / / 26.07.2006
Пробел в расширении - не мой баг, а баг форума. Я вставлял правельный путь и даже пытался отредактировать пост, пробел все равно появляется.
Значит нет смысла хранить компилированые модули, тем более весят они побольше, чем исходник, а за скорость компиляции и угрозу переделки моего модуля левым лицом я тоже не переживаю.
"если ты указываешь абс путь..... и файла там не оказалось - fatal error"-файл был, поверь на слово, а вот то, что путь нльзя писать в pas-файлах -- новость, но логика не ясна. Тогда как это относится как ""File->Uses unit..." (Alt+F11)" о которой я писал в прошлом посте?

Свой прошлый пост по прежнему не считаю вполне отвеченым.

ЗЫ: Ты заходишь в форум в пять утра? Ты сумасшедший!
339
01 августа 2006 года
verybadbug
619 / / 12.09.2005
>"File->Uses unit..." (Alt+F11)"
модуль + путь добавляются в dpr файл.... эта тема по большей части относится к файлам проекта (формам и модулям, которые относятся исключительно к данному проекту)..... если ты добавишь сюда (в dpr...) модули + путь, где они лежат, тогда этот путь совершенно не обязательно добавлять в BrowsePath.... то есть если ты явно указал где модуль находица - компилятор его оттуда и возьмёт (при указании имени модуля в остальных файлх проекта)....

>файл был, поверь на слово
возможно прав не хватает или мож скрытый или ещё чего... попробуй этот файл запихнуть в папку с проектом..... если найдёт - глюк с указанием пути, если не найдёт - проблемы с доступом к файлу....

ps: это для тебя 5 утра..... :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог