我想加载相同的dll,例如Lib.dll多次!
- >需要为每个LoadLibrary创建一个新进程(CreateProcess函数)!
任何人都有示例或一些提示?!
谢谢和问候
答案 0 :(得分:13)
听起来您希望DLL的每个实例都有单独的数据段。这是我能想到这个问题的唯一原因。
实现此目的的唯一方法是确保每次调用LoadLibrary
时,DLL都有不同的文件名。每次需要加载时,将DLL复制到临时文件,确保您使用的名称与DLL的任何已加载实例不同。
我赞同上面的评论,鼓励你重新设计系统架构。
答案 1 :(得分:6)
您无法多次将同一DLL加载到单个进程中(或不加载任何效果)。
根据您的评论,DLL根据其中一个函数调用执行不同的操作,因此您需要使用“会话”系统,在该系统中为每个函数保留单独的数据集并根据需要创建它们(通过另一个调用)和传递一个句柄或类似于每个函数调用。这是大多数Win32 API的工作方式(文件句柄,窗口句柄,GDI对象等)
如果您将DLL作为COM主机并使用COM对象,那么每个类实例将自动处理它。
如果你想使用一个单独的进程,你就可以通过启动一个新进程来托管DLL并使用多种形式的IPC之一来与之进行通信。
答案 2 :(得分:3)
您正在将DLL视为对象实例。这根本不是DLL的工作方式。 DLL不是对象,它们是一堆代码和资源。无论理论上加载DLL多少次,这些都不会改变。因此,在同一进程中加载DLL的多个实例是没有意义的。
这是一个很好的例子,说明为什么全局变量往往是个坏主意。数据需要能够根据需要进行实例化。
因此,如果您需要使用多个对象实例,则应设计DLL以完成该操作。正如其他人所说,某种会话,或者只是你可以随时实例化的一些对象。
这是抽象问题的抽象答案。如果您可以解释更多关于此DLL的确切功能,以及为什么需要它的多个实例,那么这将有所帮助。