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

时间:2016-01-02 16:14:38

标签: delphi delphi-xe8

我想知道为什么如果在多行上键入编译器指令会影响所选的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错误] Crypter.dpr(29):E2003未声明的标识符:'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}

将解决问题!。

1 个答案:

答案 0 :(得分:4)

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

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

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。您只需重新键入代码即可,换行也是正确的。通常,当您从其他来源粘贴时,您会混淆换行符。