如何初始化我的自定义 IdIOHandler 字段?

问题描述

这让我大吃一惊...我只想创建一个新的IdioHandler,而且,像往常一样,我需要在构造函数中进行一些初始化...通常,我会覆盖基类的构造函数类,但是我继承的这个 TIdioHandlerStack 远非“正常”!它没有要覆盖的构造函数,并且(对我而言)不知道它是如何创建的。

  TIdEnhancedioHandler = class(TIdioHandlerStack)
  private
    FSendBuffer: TIdBytes;
    FSendBuff: TDataStream;
  public
    constructor Create;  // <-- I tested all the variations here,but non of them work
    destructor  Destroy; override;
  end;

  implementation

  constructor TIdEnhancedioHandler.Create;
  begin
   inherited Create;
   FSendBuff:= TDataStream.Create(@SendBuffer);
  end;

  destructor TIdEnhancedioHandler.Destroy;
  begin
   FSendBuff.Free;
   inherited;
  end;

  initialization

    TIdEnhancedioHandler.SetDefaultClass;

我应该将初始化代码放在哪里,以便在所有使用 IOHandlers 的 Indy 组件中通过认创建 TIdEnhancedioHandler 的新实例时执行它?

解决方法

我找到了...这是我必须重写的 InitComponent 方法。

  TIdEnhancedIOHandler = class(TIdIOHandlerStack)
  private
    FSendBuffer: TIdBytes;
    FSendBuff: TDataStream;
  public
    procedure   InitComponent; override;
    destructor  Destroy; override;
  end;

  implementation

procedure TIdEnhancedIOHandler.InitComponent;
begin
 inherited;
 FSendBuff:= TDataStream.Create(@SendBuffer);
end;