【发布时间】:2012-02-08 09:43:49
【问题描述】:
我正在使用LoadLibrary 函数在Windows 中加载一个DLL。我的问题是:如果我为同一个 DLL 多次调用此方法,我是否会获得 DLL 的不同实例的句柄,还是它们都引用同一个实例?
此外,这种行为与 Linux SO 文件有何关联,是相同还是完全不同,在这方面我可以做出哪些假设?谢谢。
【问题讨论】:
-
您想要一个单独的 DLL 实例(及其全局状态)吗?
-
@DavidHeffernan 可能,但前提是它也可以在 Linux 中完成。我更想弄清楚事情“通常”是如何运作的。如果您所描述的可能,我很想知道如何。
-
它在操作系统中的工作方式相同。获取 DLL 的单独实例有一个肮脏的技巧。每次需要新实例时,将文件复制到临时位置并为其指定一个唯一名称。这样你就可以强制系统加载一个新模块。由于糟糕的设计和全局状态的使用,我有时会使用这种技术来解决不是线程安全的库。
-
@DavidHeffernan - 请记住,文件的路径不是决定因素,它是标识它的文件名。跨度>
-
@polynomial 不是这样。加载两个同名但在不同文件夹中的 DLL 将导致加载两个不同的模块。你说的我认为是 16 位 Windows 的情况。
标签: c++ windows linux dll shared-libraries