多次加载相同的dll

leo*_*n22 8 c++ dll winapi process loadlibrary

我想加载相同的DLL,例如Lib.dll多次!

- >需要为每个LoadLibrary创建一个新进程(CreateProcess函数)!

任何人都有一个例子或一些提示?!

谢谢和问候

Dav*_*nan 13

听起来您希望DLL的每个实例都有单独的数据段.这是我能想到这个问题的唯一原因.

实现此目的的唯一方法是确保每次调用时LoadLibrary,DLL具有不同的文件名.每次需要加载时,将DLL复制到临时文件,确保您使用的名称与DLL的任何加载实例不同.

我赞同上面的评论,鼓励您重新设计系统架构.


Dea*_*nna 6

您不能多次将相同的DLL加载到单个进程中(或不加载任何效果).

根据您的注释,DLL根据其中一个函数调用执行不同的操作,因此您需要使用"会话"系统,在该系统中为每个函数保留单独的数据集并根据需要创建它们(通过另一个调用)并传递句柄或类似于每个函数调用.这是大多数Win32 API的工作方式(文件句柄,窗口句柄,GDI对象等)

如果您使DLL成为COM主机并使用COM对象,那么每个类实例将自动处理它.

如果你想使用一个单独的进程,那么你可以通过启动一个新的进程来托管DLL并使用多种形式的IPC之一与之通信.

  • “您不能将同一个 DLL 多次加载到单个进程中(或不加载并产生任何影响)。” 其实只要文件名不同就可以。 (3认同)