我正在为外部硬件开发一个旧的DLL接口库。
此库使用共享数据段(#pragma data_seg(...)
)来共享进程间硬件状态的结构。
我认为,基于this,DLL只被Windows加载一次,但我发现加载DLL的进程必须从同一路径加载 他们之间的整体沟通能够正常运作。甚至库的文档都说明了这一点。
在the linked page中明确报告:
如果已在内存中加载了具有相同模块名称的DLL,则系统会在解析加载的DLL之前检查重定向和清单,无论它在哪个目录中。系统不会搜索DLL。
所以我有点困惑...... DLL的位置是否会影响共享数据段(从不同进程的角度来看)?
证据表明情况确实如此,但我是否误解了文件?
答案 0 :(得分:0)
报告Hans Passant时,引用仅适用于多次加载DLL的进程。
在我的问题的情况下,DLL被每个进程加载一次。在这种情况下,了解系统中DLL的确切搜索顺序可能很重要。
正如linked文章所述,这也取决于系统配置(例如,如果 SafeDllSearchMode 是否处于活动状态)。