Главная страница
    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.47 MB
Время: 0.043 c
2-1186919229
Lavrenty
2007-08-12 15:47
2007.09.02
Подключение к сети


15-1186317988
user_
2007-08-05 16:46
2007.09.02
WSH


15-1186427988
Kostafey
2007-08-06 23:19
2007.09.02
Установка кодировки


15-1185959643
Сатир
2007-08-01 13:14
2007.09.02
Не сохраняются настройки cxGrid, если не установлен Delphi


2-1186495868
SLesya
2007-08-07 18:11
2007.09.02
dll/bpl + отладчик





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