initialization
andセクションを持つユニットがありfinalization
ます。このユニットには、 でインスタンス化され、initialization
で破棄される複雑なオブジェクトが含まれていfinalization
ます。ただし、このオブジェクトには ADO 接続も含まれています。ADO は COM であり、スレッドごとに初期化する必要があるため、スレッド間でこれを使用する場合は問題になります。
これは、現在このグローバル オブジェクト インスタンスを処理する方法です。
uses
ActiveX;
...
initialization
CoInitialize(nil);
_MyObject:= TMyObject.Create;
finalization
_MyObject.Free;
CoUninitialize;
end.
これはメインスレッドでのみ機能します。他のスレッドはそれにアクセスできず、例外が返されますCoInitialize has not been called
。
このユニットをスレッドセーフにするためにこれを回避するにはどうすればよいですか? 作成されたスレッドのすべての作成/破棄をフックする方法が必要であり、各スレッドはこのオブジェクトの異なるインスタンスを参照する必要があります。しかし、どうやってそうするのですか?