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