2016-12-05 19 views
-1

APIとのやりとりにサードパーティのCOMライブラリを使用する必要があります。それはOKをインストールしたようだ、と私に提供されているテストハーネスがOKを動作するようだので、DLLに何も問題はないと確信しています。COMを使用しようとすると、クラスが登録されていません(32ビットプロセスからでも)

マイ.NETコードは、この(2015年対中)のようになります。

Type t = Type.GetTypeFromCLSID(new Guid("xxxxx")); //this works ok 
object o = Activator.CreateInstance(t); // this throws an error 

スローエラーがある:私はメインのものを含むすべてのプロジェクトを確保している

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll 
Additional information: `Retrieving the COM class factory for component with CLSID {xxxxx} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).` 

はIとして(x86のです良い測定のために

32 bit

を、I:DLL)は32ビットのlibです知っていますlibを次のように再登録しようとしました:Regsvr32 xxxx.dll /sしかし、それでも同じエラーが発生します。

助けがあれば助かります。ありがとう。

EDIT

メインプロジェクトが実際のx86に設定され、したがって、グレー表示されている "32ビットを好みます"。

enter image description here

+0

プラットフォーム名はC#プロジェクトとはまったく関係ありません。重要な設定は、プロジェクト>プロパティ>ビルドタブ(プラットフォームターゲットと32ビット優先)のジッタ強制オプションです。そして、EXEプロジェクトのための設定だけ、それはプロセスのビット数をロックするものです。この例外に対して*多くの*既存のQ + Aで説明されているように、SysInternalsのプロセスモニタを使用しても問題が解決しない場合は使用してください。 –

+0

なぜdownvote?私は同じ質問がたくさんあることを理解しています。その答えはすべて同じ回答です(32ビット対64) - 私が設定したところまでは同じです。 –

答えて

1

間違ったGUIDを持っている可能性があるように見えます。 regsvr32.exe mydll.dllを実行します。 Hansが示唆するように、レジストリ登録時にプロセスモニタを実行し、適切なCLSIDがあることを確認してください。

+0

CLSIDは良い叫びです –

+0

本当に間違ったCLSIDだったことを強調する答えを編集できますか? –

関連する問題