3

C# .NET COM から例外を発生させる方法。実際、私は Borland Delphi 7.0 を使用してビルドされた Win32 アプリケーション内にいて、.NET で関数を使用しようとしています。C# で発生する例外が Delphi に再ルーティングされないという事実を除いて、すべて正常に動作しています。ある種のメソッド デコレータが不足していると思います。ここにコードがあります:

void iLinkV2.FindLinkedClientEng(string SourceApp, string SourceClientID,
     ref object ClientID, ref object Engagement)
{
    throw new COMException("errClientNotFound",
        (int)ExceptionsType.errClientNotFound);
    ClientID  = SourceClientID; 
}

[ComVisible(true),
 Guid("D731C821-EEA2-446E-BC5A-441DCA0477F5"),
 InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface iLinkV2
{ ...
}
4

1 に答える 1

8

その必要はありません。例外は COM 相互運用仕様の一部ではなく、モジュールの境界を越えることはできません。ステータス コードを使用して、エラーを示すことができます。

メソッドが終了する直前に (各 COM インターフェイス メソッドで) 例外をキャッチします。結果をエラーコードに変換します。を使用すると、HRESULTそれを as として消費しsafecall、Delphi コンパイラにフェンスの反対側で例外を再発生させることができます。

于 2012-11-16T17:57:25.997 に答える