2012-04-19 13 views
0

VB.NET 2010でCOM DLLを作成しています(DLL Aと呼ぶことができます)。このDLLは、既存のDLL(DLL B)の関数を使用します。 VS2010のテストアプリケーションからコードを実行すると、すべてがうまくいきます。別のCOM DLLへの呼び出しでVB.NET呼び出しCOM DLLがエラーになる

(試験APP) - >(DLL A) - >(DLL用B)

今は実際のアプリケーションでDLL A(VB6で)

(実APP)への参照を追加 - >(DLL A) - >(DLLのB)

...と私はこのエラーを取得

標準 'Object.classを' をインタフェースするタイプ 'システム.__ ComObject' のCOMオブジェクトをキャストすることができません。次のエラーのため、IID '{GUID}'のインターフェイスのCOMコンポーネントのQueryInterface呼び出しが失敗したため、この操作は失敗しました:このようなインターフェイスはサポートされていません(HRESULT:0x80004002(E_NOINTERFACE)例外)。

DLL Aは初期化されますが、DLL Bへの参照を含む関数を呼び出すとすぐにエラーが発生します。

HELP!

+0

x86/x64、またはその両方を使用していますか? – rekire

+0

DLL Bも.NETベースですか?それとも旧式のCOMですか? – rskar

答えて

1

.NET DLLをデプロイし、COM(VB6)で使用する場合は、アセンブリに「RegASM」を使用して登録する必要があります。 GACフォルダ以外を登録するときは、/ codebaseスイッチをインクルードする必要があります。

/codebaseスイッチを使用する場合は、厳密な名前のアセンブリである必要があります。

+0

+1登録する必要があるので、RegAsmの使用に+1してください。しかし、GACに(通常はプライマリinteropアセンブリとして)入れない限り、強力な名前を付ける必要はありません。 dllをプライベートアセンブリとしてアプリケーションだけで使用する場合は、RegAsm/codebaseを使用し、署名に関する警告は無視してください。 – tcarvin

関連する問題