Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Директива $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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.048 c
2-1163583511
Stasmor
2006-11-15 12:38
2006.12.10
Почему код не работает на Win98, но чудесно работает в XP(RS232)


2-1163932776
KIT
2006-11-19 13:39
2006.12.10
Возникла проблема


11-1140317106
vvp
2006-02-19 05:45
2006.12.10
Как "прикрутить" иконку к проэкту?


15-1163942186
Zancik
2006-11-19 16:16
2006.12.10
Горячие клавиши


4-1154079901
Alkid
2006-07-28 13:45
2006.12.10
ShellExecuteEx и ошибка 1155