1. ホーム
  2. dll

[解決済み】クラスが登録されていないエラー

2022-02-21 15:16:19

質問

64ビットコンピュータでVisual Studio 2012からアプリケーションを実行すると、次のようなエラーメッセージが表示されます。

<ブロッククオート

CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} を持つコンポーネントのCOMクラスファクトリの取得は、次のエラーのため失敗しました: 80040154 クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG))。

VisualstudioでInventor packandgo dll libraryを使用しています。

どなたか、このエラーの原因をご存知ですか?

解決方法を教えてください。

私の問題と解決策

  1. 私は64ビットである2008 R2マシンにインストールした32ビットのサードパーティ製DLLを持っています。

  2. .net 4.5 フレームワークで作成した wcf サービスで、32 ビットのサードパーティ製 dll を呼び出して処理をしています。現在、私はビルドプロパティをターゲット「任意の」CPUに設定し、64ビットマシンにそれをデプロイしています。

  3. wcf サービスを呼び出そうとすると、エラー "80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG".) が表示されました。

  4. ProcMon.exeを使ってレジストリ問題を追跡し、プロセスがHKLMCLSIDとHKCRCLSIDのレジストリエントリを探しているが、エントリがないことを確認しました。

  5. Came to know that Microsoft will not register 32 bit com components to paths HKLMCLSID, HKCRCLSID in 64 bit machine rather it places the entry in HKLMWow6432NodeCLSID and HKCRWow6432NodeCLSID paths.マイクロソフトは64ビットマシンでは、32ビットCOMコンポーネントをパスHKLMCLSID, HKCRCCLSIDには登録しないことを知りました。

  6. 現在、64ビットプロセスが64ビットマシンで32ビットプロセスを呼び出そうとしており、レジストリエントリがHKLM/CLSID, HKCR/CLSIDにあることを探そうとします。解決策は、64ビットプロセスがHKLMWow6432NodeCLSIDとHKCRWow6432NodeCLSIDのレジストリエントリを参照するように強制することである。

  7. これは、wcfサービスプロジェクトのプロパティで、ターゲットが「Any」ではなく「X86」マシンになるように設定することで実現可能です。

  8. 2008 R2 サーバーに 'X86' バージョンをデプロイすると、 "System.BadImageFormatException.BadImageFormatException という問題が発生しました。ファイルまたはアセンブリをロードできませんでした。

  9. 解決方法 この badimageformatexception を解決するには、IIS の Apppool プロパティで、正しい Apppool の 'Enable32bitApplications' を 'True' に設定する必要があります。