「DLL依存関係をロードする前にプロセスPATH変数を変更する」という問題の有効な解決策を見つけたいと思います。
詳しく説明する前に、変更できない要件をいくつかまとめておきたいと思います。ここの他の投稿でいくつかの解決策を見つけましたが、誰も満足していません:
- 私は MinGW GCC を使用していますが、他のツールチェーンは使用できません (MS VS であっても)。
- コンピューター設定を使用してシステム (またはユーザー) PATH 変数を変更することはオプションではありません。また、メイン DLL がコピーされるパスはシステム パスではありません。
- それをロードするアプリケーションの同じパスでメイン DLL を使用することは (もちろん) 不可能です (そうでなければ、この投稿はナンセンスでした)。
- LoadLibrary で依存 DLL を読み込めません。
そのため、A.dll に依存する main.dll という DLL を作成しました。この DLL は、main.dll と同じディレクトリにありますが、実行可能ファイルとは異なります。
GetModuleFileName と SetEnvironmentVariable を DllMain または A.dll がロードされる直前に他の場所で実行したいので、実行中のプロセスに対してのみ PATH 変数を修正できます。
この問題を解決するために私が見つけた唯一の方法は、単純な新しい main.dll を作成することでした。これは、元の main.dll と同じメソッドを公開し、DllMain でパスを変更し、メソッドの 1 つの最初の呼び出しで実行します。 LoadLibrary。主な問題は、main.dll のバージョンが異なり、パブリック メソッドが異なることです。新しい main.dll を作成するたびに、新しい「ブリッジ」を作成する必要があり、これは非常に面倒です (また、バグが発生する可能性もあります)。 .
読み込みの遅延について読みましたが、MinGW で使用できる方法をまだ見つけていません。
何か案は?
どうもありがとう!!!