LoginSignup
3
3

More than 5 years have passed since last update.

LoadLibraryで126エラーが出たとき、原因となっているファイル名を知る方法

Last updated at Posted at 2017-11-27

Error 126 (ERROR_MOD_NOT_FOUND:指定されたモジュールが見つかりません。)

LoadlibraryでDLLをダイナミックにロードする時のロード失敗です。失敗したファイル名は教えてくれません。ロードしたいDLLそのものがロードできないのなら話は簡単ですが、ターゲットDLLが別のDLLをロードしようとして失敗した場合、解決に手間取ることがしばしばあります。

方法

LoadLibraryを使わずLibファイルをリンクしてDLLをロードするコンソールアプリケーションを作ります(暗黙的リンク)。実行するとWindowsはアプリケーション開始時にDLLロードに失敗し、失敗の原因となったDLLを表示します。DLLからDLLを呼んでいる場合も含めて失敗したファイル名を教えてくれます。

※この方法は、ロードするDLLのLIBファイルがあって暗黙的リンクできる場合だけしか使えません。

実施例

下の例はエラーを起こすDLL内の関数"registerDLL"を呼びだしています。

ConsoleApplication1.cpp
#include "stdafx.h"

void __stdcall registerDLL();

int _tmain(int argc, _TCHAR* argv[])
{
    registerDLL();
    return 0;
}

リンクするLibファイルの名前とディレクトリをリンカに設定して、暗黙リンクとします。

実行するとファイル名の書かれたエラーポップアップが表示されます。
err.png
あれれ、これデバッグモードやんか!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3