Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизДиректива $IFDEF Найти похожие ветки
← →
first_may © (2006-11-08 11:54) [0]Добрый день!
У меня есть некоторый модуль Test.pas, который я использую в нескольких проектах. В одном из проектов мне надо в модуль Test.pas подключит дополнительный модуль Proba.pas таким образом, что бы другие проекты нормально компилировались с учетом того, что в них нет этого Proba.pas. Я делаю так
implementation
{$IFDEF Proba.dcu}
uses Proba;
{$ENDIF}
...
{$IFDEF Proba.dcu}
... // здесь функция из модуля Proba.pas
{$ENDIF}
Правильно ли я делаю?
← →
Плохиш © (2006-11-08 12:06) [1]
> Правильно ли я делаю?
Да. А что смущает?
← →
icWasya © (2006-11-08 12:07) [2]наверно правильней будет так
implementation
{$IFDEF Proba_dcu}
uses Proba;
{$ENDIF}
...
{$IFDEF Proba_dcu}
... // здесь функция из модуля Proba.pas
{$ENDIF}
и устанавливать параметр Proba_dcu через
Project->Options->Directories/Conditionals->Conditional Defines
← →
first_may © (2006-11-08 12:18) [3]Смущает то, что в отладке не останавливаюсь внутри блока
{$IFDEF Proba_dcu}
... // здесь функция из модуля Proba.pas
{$ENDIF}
да и прога после компиляции не вызывает функцию из этих "скобок"...
А вот это зачем:
"... и устанавливать параметр Proba_dcu через
Project->Options->Directories/Conditionals->Conditional Defines"?
← →
Плохиш © (2006-11-08 12:21) [4]
> first_may © (08.11.06 12:18) [3]
> А вот это зачем:
А чтобы определить директиву Proba_dcu для компилятора.
← →
first_may © (2006-11-08 12:26) [5]именно подчеркивание? а где связь с юнитом?
← →
Плохиш © (2006-11-08 12:28) [6]
> first_may © (08.11.06 12:26) [5]
> именно подчеркивание? а где связь с юнитом?
Директивы компилятора никак не связаны с какими-то там юнитами, это как "котлеты отдельно и мухи отдельно"
PS. Сдержался :-)
← →
Anatoly Podgoretsky © (2006-11-08 12:29) [7]> Плохиш (08.11.2006 12:06:01) [1]
> Да. А что смущает?
Наверно точка
← →
Anatoly Podgoretsky © (2006-11-08 12:30) [8]> first_may (08.11.2006 12:18:03) [3]
> А вот это зачем:
Для того чтобы у тебя останавливалось внутри блока
← →
Anatoly Podgoretsky © (2006-11-08 12:31) [9]> а где связь с юнитом?
Дык смотри первый IF
← →
first_may © (2006-11-08 12:39) [10]прописал в
Project->Options->Directories/Conditionals->Conditional Defines
модуль
Proba.dcu
теперь при компиляции говорит
[Error] Vocabses.pas(127): Declaration expected but "USES" found
← →
Плохиш © (2006-11-08 12:52) [11]
> теперь при компиляции говорит
> [Error] Vocabses.pas(127): Declaration expected but "USES"
> found
У тебя синтаксическая ошибка в коде.
PS. Сдержался...
← →
Anatoly Podgoretsky © (2006-11-08 12:56) [12]> first_may (08.11.2006 12:39:10) [10]
Точка не смущает тебя?
← →
first_may © (2006-11-08 13:16) [13]не надо было писать?
← →
Anatoly Podgoretsky © (2006-11-08 14:07) [14]> first_may (08.11.2006 13:16:13) [13]
Чего не надо, не говори загадками
← →
icWasya © (2006-11-08 14:14) [15]first_may © (08.11.06 12:39) [10]
>теперь при компиляции говорит
>[Error] Vocabses.pas(127): Declaration expected but "USES" found
а какой текст вокруг
{$IFDEF Proba.dcu}
uses Proba;
{$ENDIF}
? - приведи пару строчек до и после
← →
Anatoly Podgoretsky © (2006-11-08 14:52) [16]> icWasya (08.11.2006 14:14:15) [15]
Может стоит сначала от точки избавиться, имя идентификатора не может включать точку, логически здесь получается модуль Proba в нем идентификатор dcu
Поскольку за это время он ни разу не прислушался к данной рекомендации, то надо просто прекратить отвечать и ждать, ждать, ждать
← →
first_may © (2006-11-08 14:54) [17]вот кусок кода Test.pas:
...
implementation
uses MainVar, Base;
{$IFDEF Proba.dcu}
uses Proba;
{$ENDIF}
ниже идет процедура
procedure ...
begin
...
{$IFDEF Proba.dcu}
... // здесь функция из модуля Proba.pas
{$ENDIF}
...
end;
прописал в
Project->Options->Directories/Conditionals->Conditional Defines
Proba.dcu
после всего этого, функция внутри из модуля Proba.pas не вызывается.
← →
Ketmar © (2006-11-08 14:57) [18]а дятлы всё долбили легированую сталь...
← →
Плохиш © (2006-11-08 15:25) [19]
> implementation
>
> uses MainVar, Base;
>
> {$IFDEF Proba.dcu}
> uses Proba;
> {$ENDIF}
Я догадывался :-) Не буду я ему ничего говорить, пока не изучит основ.
← →
first_may © (2006-11-08 15:35) [20]Основ чего?
← →
evvcom © (2006-11-08 15:37) [21]> [20] first_may © (08.11.06 15:35)
языка. А язык Паскаль называется или Object Pascal.
← →
first_may © (2006-11-08 15:45) [22]не вижу ошибки...
← →
Плохиш © (2006-11-08 15:45) [23]Рыдал....
← →
evvcom © (2006-11-08 15:48) [24]> [22] first_may © (08.11.06 15:45)
Тебе ошибки Плохиш жирным выделил. Или ты bold не различаешь?
← →
first_may © (2006-11-08 15:54) [25]Надо вот так что ли
implementation
uses MainVar, Base;
{$IFDEF Proba.dcu}
Proba;
{$ENDIF}
← →
evvcom © (2006-11-08 15:57) [26]Не-а.
Попробуй условности убрать, что получишь? И про .dcu почитай [16] наконец!
← →
Плохиш © (2006-11-08 16:00) [27]
> evvcom © (08.11.06 15:57) [26]
Точка там не мешает.
← →
first_may © (2006-11-08 16:02) [28]если условности уберу то один проект соберется, а второй нет
← →
evvcom © (2006-11-08 16:04) [29]> [27] Плохиш © (08.11.06 16:00)
Возможно. Не пробовал. Нет у меня такой привычки точки в идентификаторах ставить. Думаю, не плохо будет и автора от этого отучить. Во всяком случае может хоть это заставит его понять, что связи между скомпилированным модулем proba.dcu и придуманным им идентификатором proba.dcu нет никакой совершенно. ИМХО, он этого пока не понял.
← →
evvcom © (2006-11-08 16:05) [30]> [28] first_may © (08.11.06 16:02)
> если условности уберу то один проект соберется, а второй
> нет
не соберется ни один проект!
← →
Плохиш © (2006-11-08 16:06) [31]
> ИМХО, он этого пока не понял.
К сожалению, это самая малая часть того, что он не понял :-(
← →
first_may © (2006-11-08 16:09) [32]Я извиняюсь конечно, может чего то не догоняю, но у меня следующая ситуация:
Test.pas я использую в двух программах. В одной, где используется Test.pas, надо в Test.pas подключит дополнительный модуль Proba.pas. А в другой программе модуль Proba.pas не нужен вообще. Как это сделать без дублирования файла Test.pas?
← →
evvcom © (2006-11-08 16:14) [33]> [31] Плохиш © (08.11.06 16:06)
Да уж... :(
> [26] evvcom © (08.11.06 15:57)
> Попробуй условности убрать
Я имею ввиду, убери прямо из текста (временно, в качестве пошагового учебного задания) свои директивы условной компиляции, но только их, больше ничего не трогай! И попробуй скомпилить. А потом подумать.
← →
evvcom © (2006-11-08 16:18) [34]> [32] first_may © (08.11.06 16:09)
Что тебе надо, все давно уже поняли. Идея того, что ты делаешь, верная, но ошибка в реализации, в синтаксисе, наконец. Делай, что тебе говорят, пока есть желание еще с тобой возиться, и ты поймешь, где ты ошибаешься. Будешь упрямствовать, останешься со своей проблемкой один на один. А готовый ответ тебе чаще всего никто выкладывать на блюдце не будет.
← →
first_may © (2006-11-08 16:19) [35]Директивы условной компиляции убрал полностью из проекта.
Первый, где есть в проекте Proba.pas, скомпилился нормальна и функция из модуля Proba.pas сработала.
Второй сказал следующее
[Fatal Error] TorgOtd.dpr(57): File not found: "Proba.dcu"
← →
Плохиш © (2006-11-08 16:21) [36]
uses MainVar, Base
{$IFDEF Proba}
,Proba
{$ENDIF}
;
PS. Sorry, не сдержался.
← →
evvcom © (2006-11-08 16:23) [37]> [35] first_may © (08.11.06 16:19)
Покажи, что получилось после убирания директив.
> [36] Плохиш © (08.11.06 16:21)
Я так и знал!!! :-))))
← →
first_may © (2006-11-08 16:30) [38]Написал
uses MainVar, Base
{$IFDEF Proba}
,Proba
{$ENDIF}
;
Теперь два проекта компилятся нормально, но функция из модуля Proba.pas не сработала даже если в
Project->Options->Directories/Conditionals->Conditional Defines
ничего не писать, написать Proba или Proba.dcu...
← →
Плохиш © (2006-11-08 16:32) [39]Подарите ему метлу и закройте ветку. Ну, пожалуйста.
← →
Ketmar © (2006-11-08 16:33) [40]>[39] Плохиш(c) 8-Nov-2006, 16:32
>Подарите ему метлу
фигу. нечего дарить, она денег стоит.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.048 c