外部ハードウェア用の古い DLL インターフェイス ライブラリに取り組んでいます。
このライブラリは、共有データ セグメント ( #pragma data_seg(...)
) を使用して、プロセス間でハードウェア ステータスの構造体を共有します。
これに基づいて、DLL は Windows によって 1 回だけロードされると考えましたが、DLL をロードするプロセスは、DLL間の通信全体が正しく機能するために同じパスからロードする必要があることがわかりました。ライブラリのドキュメントでさえ、これを述べています。
リンクされたページでは、次のことが明示的に報告されています。
同じモジュール名の DLL が既にメモリにロードされている場合、システムは、ロードされた DLL を解決する前に、それがどのディレクトリにあるかに関係なく、リダイレクトとマニフェストのみをチェックします。システムは DLL を検索しません。
だから私は少し混乱しています... DLLの場所は共有データセグメントに影響を与えますか(異なるプロセスの観点から)?
証拠はそうであることを示していますが、ドキュメントを誤解していましたか?