私は、Windows XP と Windows Vista の間のすべての Windows バージョンで動作する C++ ソフトウェアに取り組んでいます。私のコードでは、標準ライブラリ ( Qt ライブラリ) にリンクする DLL を開発しました。私のソフトウェアが展開されると、ユーザーが自分のシステムにまったく同じ Qt ビルドを持っていなくても、わずかに異なる構成を持っていることは珍しくありません。機能が無効になっている可能性があります (そのため、Qt ビルドは同じシンボル セットをエクスポートしません)、またはライブラリ バイナリが元のライブラリと互換性がなくなるような方法でライブラリが変更されている可能性もあります。
ある時点で、LoadLibrary() 呼び出しを介して DLL をロードしています。これにより、ユーザーのシステムにある Qt ライブラリが取り込まれます。運が良ければ、彼らの Qt ビルドは私が DLL の開発中に使用したものと互換性があるため、LoadLibrary() は成功します。ただし、Qt ビルドに加えた変更によっては、LoadLibrary() 呼び出しが失敗することがあります。
- "指定されたモジュールが見つかりませんでした。"; これは通常、Qt ビルドが私の Qt ビルドよりも少ない DLL で構成されている場合に発生します。私の DLL は QtFoo.dll などを読み込もうとしますが、この dll は Qt ビルドの一部ではないため、DLL の読み込みは失敗します。
- "指定されたプロシージャが見つかりませんでした。"; これは通常、特定の機能が無効になるように Qt ビルドを変更した場合に発生し、その結果、エクスポートされるシンボルが少なくなります。
私の質問は、これらのエラーを適切にキャッチするにはどうすればよいですか? 右、単純に GetLastError() を使用してから、上記の 2 つのメッセージのいずれかを出力します。ただし、どのモジュールが見つからないか、またはどのプロシージャが欠落しているかがわかれば、はるかに便利です。見つからない DLL にリンクするアプリケーションをエクスプローラーで実行すると、エクスプローラーは「必要なライブラリ blah.dll が見つからないため、アプリケーション foo をロードできませんでした」というメッセージを表示することに気付きました。LoadLibrary() 呼び出しが正確に失敗した理由に関する詳細情報を取得するために利用できる API はありますか?