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



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

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

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

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

我认为您可以使用

获得想要实现的结果
{$if declared ...

构造。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}
  [...]

以及我在评论中提到的文章,如果宣布为$, 在D2009在线帮助中也有此事。

$if declared与类方法一起使用,例如

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

最新更新