22

Windows Server 2008 R2 に COM DLL ファイルを登録しようとしています。私が取った手順は次のとおりです。

  1. cmd管理者として実行
  2. c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll

そのコマンドを実行すると、次のエラーが発生します。

モジュールのtemp12.dllロードに失敗しました。バイナリが指定されたパスに保存されていることを確認するか、バイナリまたは依存.DLLファイルに問題がないか確認してください。指定されたモジュールが見つかりませんでした。

Windows 2000 でも同じ DLL ファイルを登録できました。

私も試しました

c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll"

そして、私はこのエラーを受け取りました:

モジュールc:\tempdl\temp12.dllはロードされましたが、 への呼び出しDllRegisterServerはエラー コード で失敗しまし0x80040154た。この問題の詳細については、エラー コードを検索語としてオンラインで検索してください。

4

8 に答える 8

26

これは、DLL 自体が最初に別の COM サーバーを登録する必要がある場合、または使用できない別の DLL に依存している場合に発生するエラーです。Regsvr32.exe ツールはほとんど何もしません。LoadLibrary() を呼び出して、コマンド ライン引数で渡された DLL をロードします。次に、GetProcAddress() を実行して、DLL 内の DllRegisterServer() エントリ ポイントを見つけます。そしてそれを呼び出して、それ自体を登録するためにCOMサーバーに任せます。

そのコードが何をするかは、かなり推測できません。ただし、得られた診断はエラーコードからかなり自明です.何らかの理由で、このCOMサーバーは最初に別のCOMサーバーを登録する必要があります. エラーメッセージはくだらないもので、他に必要なサーバーがわかりません。COM エラー処理のしくみの悲しい副作用です。

これをトラブルシューティングするには、SysInternals の ProcMon ツールを使用します。サーバーを見つけるためにRegsvr32.exe(実際にはCOMサーバー)が開いているレジストリキーが表示されます。CLSID キーへのアクセスを探します。これにより、探している {guid} のヒントが得られます。それでもサーバー DLL を正確に把握することはできません。動作しているマシンから取得したトレースと比較する必要があります。InprocServer32 キーには DLL パスがあります。

于 2011-01-05T22:04:51.433 に答える
5

の 32 ビット バージョンを使用して、この DLL を登録する必要がある場合がありますregsvr32.exe

c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll

于 2010-12-28T23:14:20.357 に答える
4

エラー 0x80040154 は COM の REGDB_E_CLASSNOTREG で、「クラスが登録されていません」という意味です。基本的に、COM クラスはインストール レジストリで宣言されません。

DLL を登録しようとしたときにこのエラーが発生した場合は、この DLL の登録コードが、このインストールで見つからないか登録されていない別のCOM サーバー (DLL または EXE) をインスタンス化しようとしている可能性があります。

元の DLL ソースにアクセスできない場合は、SysInternal のProcess Monitorツールを使用して COM レジストリ ルックアップを追跡することをお勧めします (以前はもっと単純な RegMon ツールがありましたが、機能しなくなった可能性があります)。

作業プロセス (ここでは Regsvr32.exe) にフィルターを設定して、興味深いものだけをキャプチャする必要があります。次に、失敗した HKEY_CLASSES_ROOT\[a progid , a string] に対するクエリ (たとえば、NAME_NOT_FOUND エラーで)、または失敗した HKEY_CLASSES_ROOT\CLSID\[a guid]に対するクエリを探す必要があります。

PS: 残念ながら、完全に動作している Windows システムでは失敗しているように見えるものが多数ある可能性があるため、すべてのエラーを注意深く調べる必要があります。幸運を :-)

于 2011-01-04T18:45:03.753 に答える
1
于 2012-07-23T11:45:11.113 に答える
0

COM オブジェクトが ATL を使用している場合は、次の KB 記事で説明されているように、ATL をインストールする必要がある場合があります。

http://support.microsoft.com/kb/201191

これらのライブラリは、正しいバージョンを確保するために、おそらく開発者が提供する必要があります。

于 2010-12-28T23:33:26.713 に答える
0

これが起こらなければならないことです。

登録する DLL をコピーする必要があります: c:\windows\SysWOW64\

次に、[実行] ダイアログで、次のように入力します。 C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

次のメッセージが表示されます。

c:\windows\system32\YourDLL.dll の DllRegisterServer が成功しました。

于 2012-10-29T01:42:17.643 に答える