私が抱えていた問題を説明すると長くなりすぎますが、鋭い端の問題は次のとおりです。
有効なパスを指定すると、LoadLibraryW は失敗します (nullptr を返します)。
Process Monitor は、疑わしいエラーを記録しません。実際、dll の読み込みに成功した場合とは異なるものを記録します (別のコンテキストでは可能です)。
dll にはシステム以外の依存関係はありません。
...そして最悪なことに、GetLastError によって返される Windows エラー コードは 3221225619 です。
3221225619 が有効なエラー コードではないと仮定すると、Windows がそのエラー コードを持たないほど問題が発生する可能性はありますか?
編集:
一部の人々は、失敗自体の詳細を知りたがっていると思います。
- 入力ではないようです - 動作中のバージョンと失敗したバージョンで同じであり、LoadLibraryW は入力文字列が切断されたときに「ファイルが存在しない」と正常に宣言しました。現在の入力にはハードコーディングされているため、エラーの余地はほとんどありません。
- dll はリリースでコンパイルされ、呼び出しコードはデバッグでコンパイルされます。私はこれを18か月間問題なく行ってきましたが、あなたにはわかりません。
- Process Monitor パッケージは、CreateFile、LoadImage、RegOpenKey など、LoadLibraryW 内で実行されている約 30 の内部操作を報告します。これらは、ファイルのサイズとメモリの場所に至るまで、動作中の呼び出しと失敗した呼び出しで同じです。
- それを呼び出す C++ オブジェクトには明らかなメモリ破損はありません。また、前述したように、Process Monitor はどちらの場合も同じ Base Image アドレスを提供します。
- 失敗は 100% 一貫しており、毎回同じ時間、同じ場所です。