Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

Баг в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
15-1186252040
ferr
2007-08-04 22:27
2007.09.02
Подкасты.


8-1164005910
sawa
2006-11-20 09:58
2007.09.02
Преобразование mp3 в wma


3-1178536064
Xmen
2007-05-07 15:07
2007.09.02
Пополнения автоинкрементного поля


2-1186559531
Sdubaruhnul
2007-08-08 11:52
2007.09.02
Правила wildcard


2-1186557316
dest81
2007-08-08 11:15
2007.09.02
ehlib





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский