2012-02-21 8 views
2

私は、WindowsプログラミングとVB.netの新人です。私たちがやっていることは、既存のサードパーティ製のCOM dllで関数を呼び出すことです。この関数には、dllで定義されているインタフェースもある型のコールバックパラメータが必要です。COMクラス内のコールバックオブジェクトとしての.NETクラス

私たちのVB.netアプリケーションでは、dllをCOMリファレンスとして追加し、DLLにインターフェイスを実装するクラスを作成しました。次に、そのタイプのオブジェクトをコールバックパラメータとして送信します。これはうまくコンパイルされます。しかし、アプリケーションを実行すると、オブジェクトが既存の型からインターフェイス型にキャストできないというエラーが表示されます。

私は単純な修正があると思うが、これまでのところ、解決策を見つけるための私の努力は不足している。誰かが私を正しい方向に向けることができれば、とても感謝しています。

ありがとうございました。

+1

いくつかのコードを投稿できますか?多分この問題:http://www.hanselman.com/blog/FusionLoaderContextsUnableToCastObjectOfTypeWhateverToTypeWhatever.aspx –

答えて

0

実装しているCOMインターフェイスにregisterdプロキシ/スタブまたは対応するtypelibrary(tlb)があるかどうかを確認することをお勧めします。

プロキシ/スタブの場合:あなたは、インターフェイスのIID(これは、このインターフェイスでassossiated GUIDです)レジストリ内を検索して、これをチェックすること

HKEY_CLASSES_ROOT 
    Interface 
     {iid} 
     (Default) = ICustomInterfaceName 
     ProxyStubClsid32 = {clsid} 

タイプライブラリの場合:

HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1} 
HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}\2.0 = Automation Hello 2.0 Type Library. 
HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}\2.0\HELPDIR = 
; U.S. English. 
HKEY_CLASSES_ROOT\TypeLib\{F37C8060-4AD5-101B-B826-00DD01103DE1}\2.0\9\win32 = hello.tlb 

置き換え{F37C8060-4AD5-101B-B826-00DD01103DE1}あなたのtypelibraryでguidがアサーションされています。

タイプライブラリが登録されている場合。そのファイルがあなたのPCに存在するかどうか確認してください。

関連する問題