Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何有条件地编译较新的Indy功能?_Delphi_Indy_Conditional Compilation - Fatal编程技术网

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

Delphi 如何有条件地编译较新的Indy功能?,delphi,indy,conditional-compilation,Delphi,Indy,Conditional Compilation,我已经找到了如何在运行时检查Indy版本的方法,有多种不同的方法。然而,我正在研究如何使用条件在编译时检查Indy版本。Indy的较新版本中有一个功能,我希望我的开源项目能够使用这个功能。但我需要有条件地编译它 我找到了IdVers.inc,但是这个文件只包含常量,没有版本条件 更具体地说,TIdHTTP有一个属性HTTPOptions,它有一个新的选项hoWantProtocolErrorContent。如果有,我想用它 如果该选项可用,我如何有条件地使用它?我认为您可以使用 {$if dec

我已经找到了如何在运行时检查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声明
与类的方法一起使用,例如

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

我想Remy可能会建议如何做,但同时你可能会看看这个,特别是
声明的
选项。@MartynA是的,
{$IF-Declared(…)}
是正确的处理方法,例如:
{$IF-Declared(hoWantProtocolErrorContent)}
,或者它必须是完全限定的,我不记得了:
{$IF-Declared(IdHTTP.tidttpoption.hoWantProtocolErrorContent)
谢谢你,这是专门用
{$IF-Declared(IdHTTP.tidttpoption.hoWantProtocolErrorContent)}
解决的。这是一个我从来不知道的巧妙技巧。这在将来肯定会派上用场。当然比使用RTTI要好。