我想知道为什么如果在多行上键入编译器指令会影响所选的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}
将解决问题!。
答案 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。您只需重新键入代码即可,换行也是正确的。通常,当您从其他来源粘贴时,您会混淆换行符。