Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.04 c
15-1163547102
nemo2
2006-11-15 02:31
2006.12.10
a dot b = |a||b|cos(a,b)= Ax*Bx + Ay*By + Az*Bz Почему ?


15-1163685346
Чапаев
2006-11-16 16:55
2006.12.10
"Детям 60-70-80х посвящается"


6-1153286706
zhekacoder
2006-07-19 09:25
2006.12.10
IP всех компов в сети


15-1163787017
antonn
2006-11-17 21:10
2006.12.10
Установка компонент в BSD 2006


2-1164360980
KyRo
2006-11-24 12:36
2006.12.10
Как узнать создана ли нить





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский