Навигация по коду прерывается внутри блоков $ IFDEF в Delphi 2010

В моем приложении есть несколько условно скомпилированных классов.

{$IFDEF SOME_OPTION}
type
  TMyClass = class
    procedure Foo;
  end;
{$ENDIF}

...

{$IFDEF SOME_OPTION}
procedure TMyClass.Foo;
begin

end;
{$ENDIF}

Этот параметр SOME_OPTION определен в «Параметры проекта» - «Компилятор Delphi» - «Условные определения» и в «Параметры проекта» - «Компилятор ресурсов» - «Каталоги и условия» - «Определяет символ препроцессора» для этого проекта.

Когда я пытаюсь нажать Ctrl + Click на их методах, ничего не происходит, навигация по коду не работает.

Я использую Delphi 2010. Как решить эту проблему?


person Andrew    schedule 16.01.2012    source источник
comment
У меня была эта проблема, даже когда определено SOME_OPTION, как и вы. Это ошибка, и шансы на ее исправление равны нулю. Даже если он определен в параметрах проекта для текущей сборки. Но особенно сложно было бы, если бы он был определен внутри файла options.inc, а не непосредственно в ваших опциях .dproj.   -  person Warren P    schedule 16.01.2012
comment
Согласен с @WarrenP Не удалось определить проблему. Мы действительно используем файл inc с параметрами, но также и с локально определенными условными выражениями. У меня есть привычка строить, а не компилировать, поэтому dcu вряд ли будет соответствовать текущим настройкам определения. Несмотря на это, условные определения и нажатие ctrl просто кажутся противоречащими друг другу и были по крайней мере с D2006, возможно, раньше.   -  person Marjan Venema    schedule 16.01.2012


Ответы (3)


Это ошибка, и шансы на ее исправление равны нулю.

/ Уоррен П.

person Andrew    schedule 29.01.2012

Я не думаю, что подходящее место находится в "Параметры проекта" - "Компилятор ресурсов" ...
Но в "Параметры проекта" - "Компилятор Delphi" - "Условные определения".

Обновление:
Я пробовал использовать Delphi XE здесь, на работе, и независимо от того, определено ли оно или нет, или где, похоже, не имеет значения, чтобы Ctrl + Click работал для меня во всех случаях.
Обратите внимание, что у меня есть IDE Андреаса Хаусладена Установлен пакет исправлений 4.6.6 и DDEv Extension 2.5. Вы ими пользуетесь?

Обновление 2:
Находясь в том же модуле, кажется, что он работает, даже когда SOME_OPTION не определен, но не когда Foo вызывается из другого модуля.
Что, похоже, работает, хотя это когда он правильно определен в параметрах проекта и вы перестраиваете приложение (вы видите синюю точку в строке, вызывающей Foo). Затем IDE может использовать компилятор для поиска источника функции в другом модуле.

На данный момент это все, что я могу придумать, чтобы помочь с этим. И как уже было сказано, это не лучшая часть IDE ...

person Francesca    schedule 16.01.2012
comment
Извините, я пропустил это место при вводе вопроса. Он тоже включен туда - person Andrew; 16.01.2012
comment
Независимо от того, вы должны удалить определения из настроек компилятора ресурсов. - person David Heffernan; 16.01.2012
comment
Я использовал IDE Fix Pack и DDEv Extension 2.5 - безрезультатно - person Andrew; 16.01.2012
comment
Если ifdef касается класса, от которого унаследован, могут произойти забавные вещи iirc, см. Заголовок stackoverflow.com/questions/1057510/ - person Marco van de Voort; 20.01.2012

Не работает, потому что вы плохо определили свои директивы компиляции. Директивы должны быть определены, как описано здесь http://docwiki.embarcadero.com/RADStudio/en/Delphi_compiler_directives в разделе Использование IDE. Хорошей практикой также является перекомпиляция проекта после изменения условных директив.

person RBA    schedule 16.01.2012
comment
Даже когда я помещаю {$ DEFINE SOME_OPTION} в свой файл dpr, никаких изменений. - person Andrew; 17.01.2012