2011-01-14 4 views
0

私は、interopアセンブリもあるサードパーティのDLLを使用する必要があるVB.Netプロジェクトを持っています。だから私はこのようなものを持っている:アセンブリがVS10オブジェクトブラウザにリストされていません

Hummingbird.DM.Server.Interop.PCDClient.dll 
PCDClient.dll 

私はプロジェクトに直接相互運用への参照を追加しようとしたが、ファイルを実行している上、私はCOM登録されていないエラーが発生しました。

だから、私は次のように相互運用機能を登録しようとした:

gacutil /if "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

regasm "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

でもVSを再起動した後、アセンブリはまだ見えません。

答えて

1

あなたのregasmコマンドは、COMサーバーのレジストリキーを破棄しました。あなたはそれを再インストールする必要があります。自分の[ComVisible]コードでのみregasmを使用してください。

64ビットオペレーティングシステムでこのコンポーネントを実行しようとしているため、正しくインストールされていないコンポーネントを使用する上で問題が発生する可能性があります。コンポーネントは32ビットですが、最も一般的なケースです。アプリを使用できるようにするには、アプリを32ビットモードで実行する必要があります。 VB.NET IDEでは、Project + Properties、Compileタブ、スクロールダウン、Advanced Compile Options、Target CPUを "x86"に設定しています。

このような問題の究極のトラブルシューティングツールは、SysInternalsのProcMonユーティリティです。 COMがHKLM \ Software \ Classes \ CLSIDキーを使用してロードするDLLを検索する方法を示します。

+0

私はGACUTILだけを使うべきであり、両方を使うべきではないと言っていますか? 私は "regasm/u ..."を使って登録を解除しました。そして、 "gacutil/if ..."はこれで十分ですか? 私のシステムはWin XP 32Bitです。 – udeleng

+0

どちらも使用しないでください。このCOMサーバーは管理されたコードではありません。私が言ったように、regasmを実行するとCOMサーバーのレジストリキーが上書きされますので、再インストールする必要があります。 *管理対象でない* DLL(Interopライブラリではない)でRegsvr32を使用するのは可能性が高い方法ですが、問題があればベンダーからのサポートを求めてください。 –

+0

"regsvr32 PCDClient.dll"を使用しましたが(InteropはまだGACにありますが、それが必要かどうかはわかりません)、今はInterop.PCDCLIENTLibがオブジェクトブラウザに表示されています。 ます。gacutil /もし "C:\ ... \ Hummingbird.DM.Server.Interop.PCDClient.dll" ます。regsvr32「C:\ ... \ PCDClient あなたは、私が使うべき手順があることを確認することができます。 dll " – udeleng

0

あなたは相互運用機能を登録していますが、(エラーメッセージが示すように)COM DLLを登録していません。これを試してください:

regsvr32 pdcclient.dll 
関連する問題