Delphi XE2 で 2 つの ActiveX コンポーネントを別々のプロジェクトで作成しました。コンポーネントの 1 つが完全に機能し、それがスローするすべての例外が EOleException としてマスクされます。他の activex コンポーネントでは、例外はマスクされず、元の型としてスローされます。クライアントは Delphi XE プログラムです。
activex コンポーネントが元の例外をスローすると、コンポーネントから他のメソッドへの次の呼び出しは、ローカル文字列変数に値を設定するなど、本来すべきではない場所でアクセス違反例外をスローします。これは非常に奇妙な動作です。
両方のプロジェクトの .ridl ファイル、コンパイル オプション、.dproj ファイルを比較しましたが、原因が見つかりませんでした。
この違い/奇妙な動作の理由を知っている人はいますか?
ありがとう
編集:いくつかのコード
機能するコンポーネント 1 (すべての例外を EOleException にマスクします)
TspdMyClassX = class(TActiveXComponent, MyInterface)
...
initialization
TActiveXComponentFactory.Create(
ComServer,
TspdMyClassX,
CLASS_spdMyClassX,
1,
'',
0,
tmBoth);
EOleException をスローしない他のコンポーネントのインターフェースは異なりますが、コードの残りの部分は同じです (初期化、親クラス TActiveXComponent)。