如何初始化我的自定义 IdIOHandler 字段?
How can I initialize my custom IdIOHandler fields?
这让我大吃一惊...我只想创建一个新的 IdIOHandler
,并且像往常一样,我需要在构造函数中进行一些初始化...通常,我重写的构造函数基础 class,但我继承的这个 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;
这让我大吃一惊...我只想创建一个新的 IdIOHandler
,并且像往常一样,我需要在构造函数中进行一些初始化...通常,我重写的构造函数基础 class,但我继承的这个 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;