VC PlusPlus:起動時のエラー 0xc000007b 対処方法

提供:yonewiki

VC PlusPlusに戻る

概要

 「アプリケーションを正しく起動出来ませんでした。(0xc000007b)。[OK]をクリックしてアプリケーションを閉じてください。」というエラーが表示される。


 この原因は32bitのdllとexe群で、64bitのdllとexe群を相互に参照し合っている場合に発生します。呼び出している全てのexeとdllが32bit版のものになっているかを確認する必要があります。大規模なものだと、物凄く大変な作業になる可能性もあります。そこで簡単に確認する方法を考えてみました。


 大規模な場合はdllとexeのパス一覧を取得できるツールが必要になります。例えば、https://github.com/dodonki1223/FolderFileList/blob/master/docs/README.mdのようなフォルダファイルリスト.exeでは、特定のパスの中を対象に拡張子を検索を可能としてくれています。dllとexeというのを一緒に検索することは出来ませんが、2回やるだけなので、楽な方だと思います。もっと違うツールだとサクッといけるかもしれませんが、自分はコレが便利かなぁと思いました。やるな!アプリ作成者さん。っていう感じです。しかも表形式にいくつかのパターンでリスト化してくれるので、有り難いです。結構後ろの方にある。対象フォルダ以下というフィールドがいい感じで相対パスのリストになるので、扱いやすい。


 取得したリストをテキストにペロッて貼り付けます。それで「\n」を「 /headers | findstr machine\n"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\bin\Hostx86\x86\dumpbin" 」とかに変換します。dumpbinコマンドを使って/headersを検索し、その中にあるmachineというキーワードの部分を探すというコマンドを沢山作ります。変換でやると一番最初と最後がうまく変換できないので、ちょっと調整が必要です。dumpbinコマンドの在り処は、それぞれのVisualStudioの設定によります。いくつか入っている場合もありますので、適当なものを使ってください。パスを切ると、コマンドが短く出来ますが、お任せします。


dumpbin ((lib or exe)ファイルの(完全パスor相対パス)) /headers | findstr machine

32bitなら

14C machine (x86)
                   32 bit word machine

64bitなら

8664 machine (x64)

   というような結果を得られるでしょう。


 これで確実に解決できるとは限りません。


 それでも分からないときは以下のツールを使いましょう。かつてはMicrosoftから密やかに提供されていたToolのDepeds.exeというのがあったのですが、今はありません。それに代わるアプリケーションがDependenciesというツールです。DLLを参照するようなアプリケーションの本体をツールに読み込ませると関連するDllが列挙されます。赤色で表示された部分が問題の部分となります。こういうDLLとの組み合わせを確認するツールを「依存関係を確認するツール」と呼びます。依存関係。あまり使わない言葉だわな。

 

VC PlusPlusに戻る