Главная страница
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.093 c
3-1178536064
Xmen
2007-05-07 15:07
2007.09.02
Пополнения автоинкрементного поля


8-1164549096
Тутуров
2006-11-26 16:51
2007.09.02
.3gp в паинтбоксе


10-1136464878
dr D
2006-01-05 15:41
2007.09.02
Контролирование нового документа из Add-in


15-1186068053
Kenifer
2007-08-02 19:20
2007.09.02
Как сделать чтоб программа сохраняла файл!


15-1185947243
Slider007
2007-08-01 09:47
2007.09.02
С днем рождения ! 1 августа 2007 среда