9

C ++/ATLプロジェクトの32ビットバージョンをに登録しようとすると

regsvr32 project.dll

このエラーが発生します:

LoadLibrary("project.dll") failed - The specified module could not be found

project.dllは、VisualStudio10でATLを使用して構築された私のdllです。

64ビットバージョンは正常に登録されました。

私は何が欠けていますか?

4

3 に答える 3

9

これとまったく同じエラーが発生しましたが、解決策は再配布可能ファイルをインストールしていませんでした。依存するDLLはすべて、depends.exeによるとシステム1に存在していました。

私の場合、KERNEL32.DLLのアイコンは少し赤みがかっていました。Depends.exeは多くの説明を提供しませんでしたが、調べてみると、インポートされた関数の1つがシステムのDLLから欠落していることがわかりました。インポートされた関数を表示するには、ツリービューで依存するDLLを選択し、右側のパネルでインポートを探します。PI列で並べ替えると、不足しているインポートの赤いアイコンが表示されます。

不足しているインポートを確認する

私の場合、不足している機能は、私の悲しいターゲットオペレーティングシステムであるWindowsXPには存在しなかった機能でした。私のプログラムはこの関数に直接依存していなかったので#define、プロジェクトで次のことを回避することができました。

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501

これらのマクロをコンパイルすると、問題の関数がヘッダーで宣言されなかったため、ロード時にインポートされませんでした。今、私は使用することができましたregsvr32。もちろん、これは非常に特殊な(そして幸運な)ケースです。そのインポートやその他の新しいAPIに依存していなかったため、プロジェクトのリターゲットを回避できました。システムDLLでなければ、依存関係グラフのサブツリー全体を更新する必要が生じる可能性のある新しいバージョンを見つける必要がありました。さらに悪いことに、不足しているインポートに依存している場合は、深刻なリファクタリングが必要になります。

要約すると、このエラーメッセージ2は、次の問題が原因で発生する可能性があります。

  1. DLLファイルが見つからないか、読み取ることができませんでした。コマンドラインを確認してください。
  2. 一部の依存DLLが見つからないか、読み取ることができませんでした。
  3. 一部の依存DLLから一部のインポートが欠落しています。これらがシステムDLLである場合は、間違ったバージョンのWindowsをターゲットにしている可能性があります。これらが非システムDLLである場合は、それらの新しいバージョンとそれらのすべての依存関係をインストールする必要があります。

1 .:IESHIMS.DLLとWER.DLLは別として、この古いツールのバグと思われます。
2 .:または、実際には、特定のシステムにDLLをロードする際の問題

于 2014-09-30T08:28:21.110 に答える
5

この場合、エラーの説明は誤解を招く可能性があります。システムはDLL(project.dll)を検出しますが、DLLの1つ(または複数)の依存関係が欠落している可能性があります。

于 2012-07-30T07:59:21.063 に答える
2

インストールしました

Microsoft Visual C++ 2010 Redistributable Package 

これで、dllをインストールできます。

これは機能しますが、dllをクライアントで機能させるためにこのパッケージをクライアントにインストールする必要がないため、これにはあまり満足していません。

于 2012-07-30T09:01:43.440 に答える