Главная страница
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.025 c
15-1186059055
Dib@zol
2007-08-02 16:50
2007.09.02
Fraps must die


15-1186253150
palva
2007-08-04 22:45
2007.09.02
что для программиста - развлечение, то для ламера - смерть


6-1163754057
alucard
2006-11-17 12:00
2007.09.02
Помогите составить метод IdHTTP1.Post


1-1182682785
vr-online
2007-06-24 14:59
2007.09.02
POST и GET по HTTPS


2-1186590323
>>DEATH<<
2007-08-08 20:25
2007.09.02
Помогите с SelAttributes