1

我正在为外部硬件开发一个旧的 DLL 接口库。

该库使用共享数据段 ( #pragma data_seg(...)) 在进程之间共享硬件状态的结构。

我认为,基于,DLL 仅由 Windows 加载一次,但我发现加载 DLL 的进程必须从同一路径加载它,以便它们之间的整个通信正常工作。甚至图书馆的文档也说明了这一点。

链接页面中明确报告:

如果内存中已经加载了具有相同模块名称的 DLL,则系统在解析到加载的 DLL 之前只检查重定向和清单,无论它位于哪个目录。系统不会搜索 DLL。

所以我有点困惑...... DLL 的位置是否会影响共享数据段(从不同进程的角度来看)?

证据表明确实如此,但我误解了文档吗?

4

1 回答 1

0

正如Hans Passant所报道的,这句话仅适用于多次加载 DLL 的进程。

就我的问题而言,每个进程都加载了一次 DLL。在这种情况下,了解系统中 DLL 的准确搜索顺序可能很重要。

正如链接文章中所报告的,这还取决于系统配置(例如SafeDllSearchMode是否处于活动状态)。

于 2013-11-06T14:12:44.650 回答