如何有条件地编译较新的Indy功能?

Jer*_*dge 3 delphi indy conditional-compilation

我已经找到了关于如何在运行时检查Indy版本的答案,并且有多种不同的方法。但是,我正在寻找如何在编译时使用条件语句检查Indy版本。较新版本的Indy中有一个功能,我希望我的开源项目使用此功能(如果可用)。但是我需要有条件地编译它。

我已经找到IdVers.inc,但是此文件仅包含常量-没有版本条件。

更具体地说,TIdHTTP具有HTTPOptions具有新选择的属性hoWantProtocolErrorContent。如果可以的话,我想使用它。

如果可用,如何有条件地使用此选项?

Mar*_*ynA 5

我想您可以使用

{$if declared ...
Run Code Online (Sandbox Code Playgroud)

构造。在rtl的SysInit.Pas中有一个用法示例:

function GetTlsSize: Integer;
{$IF defined(POSIX) and defined(CPUX86) and (not defined(EXTERNALLINKER))}
asm
        // Use assembler code not to include PIC base gain
        MOV  EAX, offset TlsLast
end;
{$ELSE}
begin
  Result := NativeInt(@TlsLast);
  {$IF DECLARED(TlsStart)}
  Result := Result - NativeInt(@TlsStart);
  {$ENDIF}
  [...]
Run Code Online (Sandbox Code Playgroud)

除了我在评论中提到的文章$ If Declared之外D2009联机帮助中也有此内容。

$if declared 使用类的方法,例如

procedure TMyClass.DoSomething;
begin
  {$if declared(TMyClass.Added)}  // Added being a procedure of TMyClass
  Added;
  {$endif}
end;
Run Code Online (Sandbox Code Playgroud)