Delphi - 编译器指令多行效果选择 IDE 错误行

Delphi - Compiler Directives multi lines effects selected IDE error line

我想知道为什么在多行上键入编译器指令会影响选定的 IDE 错误行。

例如:

{$SETPEFlAGS IMAGE_FILE_DEBUG_STRIPPED or
 IMAGE_FILE_LINE_NUMS_STRIPPED or
 IMAGE_FILE_LOCAL_SYMS_STRIPPED or
 IMAGE_FILE_RELOCS_STRIPPED}

.....

procedure Foo();
begin
  WriteLn('1');
  WWriteLn('2');
  WriteLn('3');
  WriteLn('4');
  WriteLn('5');
end; 

IDE 错误

[dcc32 Error] Crypter.dpr(29): E2003 Undeclared identifier: 'WWriteLn'

在源代码中,所选行是 WriteLn('5'); 而不是 WWriteLn('2');

但是如果以这种方式输入编译器指令(一行):

{$SETPEFlAGS IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or IMAGE_FILE_RELOCS_STRIPPED}

将解决问题![​​=17=]

如果事情真如你所说,那么这就是IDE的缺陷。将该问题作为错误报告给 Quality Portal。

解决这个问题很容易。不要使用 multi-line 指令。在这种情况下,您可以将标志提取到一个单独的常量中,并在指令中引用它。

const
  PEFlags = IMAGE_FILE_DEBUG_STRIPPED or
    IMAGE_FILE_LINE_NUMS_STRIPPED or
    IMAGE_FILE_LOCAL_SYMS_STRIPPED or
    IMAGE_FILE_RELOCS_STRIPPED;

{$SETPEFlAGS PEFlags}

我在第一段犹豫的原因是如果换行不正确也会出现你描述的情况。如果您的换行符不是 CR+LF,那么 IDE 会对行号感到困惑。因此,值得检查您的换行符是否为 CR+LF。您可以简单地 re-type 代码和换行符将是正确的。当您从另一个来源粘贴时,通常会混淆换行符。