2011-01-03 6 views
1

IDLファイルでマネージクラス(C#/ .NETで構築)を宣言したいと思いますが、コンストラクタの終了時にInvalidCastExceptionを取得して返します。 (MyThingオブジェクトを 'MyThingClass'と打ち込むことはできません)COMコンストラクタがInvalidCastExceptionをスローする

tlbを登録した後、私のテストアプリケーション(C#/ .NET)でも実際のコンストラクタを呼び出すことができます。私はそれをデバッグすることもできます。コンストラクタから戻ってくるまで、すべてがうまく動作します。

私はimportlibを使ってDLLをIDLにプルすることを考えましたが、ビルド前にtlbが必要です(鶏肉や卵の問題)。

問題の原因を調査すると、単純なキャスティングの問題が発生します。

アイデア?

+0

あなたはこれらの質問を見てきましたか?http://stackoverflow.com/search?q=idl+c%23 –

+0

おそらく例を挙げると、> –

+0

という人がもっと答えるかもしれません。 Tlbexp/Regasmを使用していますか?また、サーバーとクライアントの両方がマネージコードで記述されている場合、なぜCOMをまったく使用していますか? –

答えて

0

一般に、COMインターフェイスを作成してから、クラスがインターフェイスを実装していることを確認します。すべての.NETクラスがVB6で理解できるわけではなく、これは最初から問題でした。私が読むことを十分に知っている主題に関する2冊の本があります:
.NET 2.0 Interoperability Recipes
Professional Visual Basic Interoperabilityです。

2番目の本はかなり古く、.NET 1をカバーしていますが、まだいくつかの有用な点があります。

私が推測していることは、VB(OK、これはVC++など)のクラスを返すということです。

関連する問題