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

Вниз

Баг в Delphi (от 7 до 2007) с условной компиляцией   Найти похожие ветки 

 
Loginov Dmitry ©   (2007-08-07 22:41) [0]

var
 Form1: TForm1;

{$DEFINE AAA}

resourcestring
 stroka1 = "Строка 1!";
 stroka2 {$IFNDEF AAA} : string (или любой другой текст) {$ENDIF} = "Строка 2!";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(stroka2);
end;

end.


Получаем:
[Pascal Error] Unit1.pas(34): E2003 Undeclared identifier: "stroka2"

если resourcestring заменить на const, то все пашет.

Если вместо ShowMessage(stroka2) вызвать ShowMessage(stroka1) то все работает нормально :)

Получается, что при использовании resourcestring в Delphi вообще нельзя разделять с помощью директив условной компиляции имя переменной и символ равно.

Вот такой вот глючечек...


 
Reindeer Moss Eater ©   (2007-08-07 22:51) [1]

Получается, что при использовании resourcestring в Delphi вообще нельзя разделять с помощью директив условной компиляции имя переменной и символ равно.

Нет, не получается.


 
Loginov Dmitry ©   (2007-08-07 22:54) [2]

> Нет, не получается.


Конечно между именем переменной и символом равно можно поставить директивы условной компиляции. Если переменная не используется, то это все даже скомпилицца.


 
Reindeer Moss Eater ©   (2007-08-07 22:55) [3]

Можно и не между именем и знаком равно. И все равно будет как и задумано.


 
Loginov Dmitry ©   (2007-08-07 23:09) [4]

> Можно и не между именем и знаком равно. И все равно будет
> как и задумано.


На самом деле я просто привел какой-то надуманный пример. Понадобилось сделать такой вот маневр (в зависимости от опции условной компиляции делать объявление через resourcestring или var), а оказывается так нельзя - баг компилятора. Я этого точно не задумывал.


 
Loginov Dmitry ©   (2007-08-07 23:09) [5]

На самом деле я НЕ просто привел какой-то надуманный пример


 
Reindeer Moss Eater ©   (2007-08-07 23:11) [6]

в зависимости от опции условной компиляции делать объявление через resourcestring или var

У тебя нарисовано все что угодно, только не это.


 
Loginov Dmitry ©   (2007-08-07 23:16) [7]

> У тебя нарисовано все что угодно, только не это.


Ну тогда так:


{$DEFINE UseResStr}

{$IFDEF UseResStr}
resourcestring
{$ELSE}
var
{$ENDIF}

 stroka1 {$IFNDEF UseResStr} : string {$ENDIF} = "Строка 1!";
 stroka2 {$IFNDEF UseResStr} : string {$ENDIF} = "Строка 2!";
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(stroka1);
end;


 
Reindeer Moss Eater ©   (2007-08-07 23:23) [8]

Я бы решил такое вот так

{$IFDEF AAA}
{$I ...}
{$ELSE}
{$I ...}
{$ENDIF}


 
Loginov Dmitry ©   (2007-08-07 23:28) [9]

Я почти также режил. В inc-файле сделал:

{$IFDEF}
resourcestring
.........
{$ELSE}
var
.........
{$ENDIF}



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
15-1185909685
Prohodil Mimo
2007-07-31 23:21
2007.09.02
А у нас светофор поставили при выезде со двора


10-1136451082
SupKlo
2006-01-05 11:51
2007.09.02
Как передать jpeg с клиента на сервер через dcom


2-1186399521
AlinaVK
2007-08-06 15:25
2007.09.02
constraint


15-1185994245
JohnJ
2007-08-01 22:50
2007.09.02
Распознавание текста с изображения (картинки формата bmp)


15-1185892916
cosinus
2007-07-31 18:41
2007.09.02
Эм... Глупейший вопрос по SoftIce.