私のアプリケーションでは、TThread型の基本スレッドオブジェクト(FrameObject)から継承する2つのスレッドオブジェクト(OuterとSash)があります。これはD7ですべて正常に動作します。アプリケーションを拡張する必要があり、私はこの機会をD2010に移しています。しかし、Delphiをコンパイルしようとすると、FrameObject Createメソッドの宣言が前の宣言と異なるという不満があります。TThreadの継承問題D2010でD7と同じように動作していないようです
クラスの種類とコンストラクタを以下に示します。
TFrameObject = class(TThread)
constructor TFrameObject.Create(BuildType: TBuildType; OnBatchStep: TBatchNotify; OnThreadComplete: TNotifyTermination);
begin
inherited Create(True);
...
end;
TOuter = class (TFrameObject)
constructor Create(BuildType: TBuildType; OnBatchStep: TBatchNotify; OnThreadComplete: TNotifyTermination; ExceptionHandler: TExceptionHandler);
begin
inherited create(BuildType, OnBatchStep, OnThreadComplete);
fExceptionHandler := ExceptionHandler;
...
end;
TSash = class (TFrameObject)
constructor Create(BuildType: TBuildType; OnBatchStep: TBatchNotify; OnThreadComplete: TNotifyTermination; ExceptionHandler: TExceptionHandler);
begin
inherited create(BuildType, OnBatchStep, OnThreadComplete);
fExceptionHandler := ExceptionHandler;
...
end;
D2010コードはD7のソースファイルを直接コピーであると私が言うように、これはすべてがD7で正常に動作します(おそらく、それはいけない!) - だからここで私が間違っているんですか?そのうちの一つは、(インターフェース部に)あなたのTFrameObject
宣言例TBuildType
のためので、実装セクション内のインターフェイスおよび他で使用されている複数のユニットで宣言されたタイプのため
また、ライブラリパスの順であることを確認してください両方のバージョンで同じ - これは、問題のあるユニットを見つけるのに役立ちます。この問題のブルートフォースチェックは、デモアプリケーションのクラスの名前を変更することです。 'TFrameObjectTest'に問題が発生した場合は、あなたが見ているユニットですべてが起きていることがわかります。 –