如何有条件地编译更新的 Indy 功能?
How to conditionally compile a newer Indy feature?
我已经找到 this answer 如何在 运行 时间检查 Indy 版本,并且有多种不同的方法。但是我正在寻找如何使用条件语句在编译时检查 Indy 版本。较新版本的 Indy 中有一项功能,如果可用,我希望我的开源项目使用此功能。但是我需要有条件地编译它。
我找到了 IdVers.inc
,但是这个文件只包含常量 - 没有版本条件。
更具体地说,TIdHTTP
有一个 属性 HTTPOptions
,它有一个新选择 hoWantProtocolErrorContent
。如果可以的话,我想用一下。
如果此选项可用,我如何有条件地使用它?
我认为您可以使用
获得您想要的结果
{$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}
[...]
以及我在评论中提到的文章,$If Declared,
D2009 online help.
中也有这个
$if declared
使用 类 的方法,例如
procedure TMyClass.DoSomething;
begin
{$if declared(TMyClass.Added)} // Added being a procedure of TMyClass
Added;
{$endif}
end;
我已经找到 this answer 如何在 运行 时间检查 Indy 版本,并且有多种不同的方法。但是我正在寻找如何使用条件语句在编译时检查 Indy 版本。较新版本的 Indy 中有一项功能,如果可用,我希望我的开源项目使用此功能。但是我需要有条件地编译它。
我找到了 IdVers.inc
,但是这个文件只包含常量 - 没有版本条件。
更具体地说,TIdHTTP
有一个 属性 HTTPOptions
,它有一个新选择 hoWantProtocolErrorContent
。如果可以的话,我想用一下。
如果此选项可用,我如何有条件地使用它?
我认为您可以使用
获得您想要的结果{$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}
[...]
以及我在评论中提到的文章,$If Declared, D2009 online help.
中也有这个$if declared
使用 类 的方法,例如
procedure TMyClass.DoSomething;
begin
{$if declared(TMyClass.Added)} // Added being a procedure of TMyClass
Added;
{$endif}
end;