加载相同的dll多次[关闭]加载相同的dll多次[关闭](Load the same dll mul

2019-05-12 09:06发布

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

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

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

THX和招呼

Answer 1:

这听起来像你想的DLL的每个实例有单独的数据段。 这是我能为这个问题想到的唯一原因。

实现这一目标的唯一方法是,以确保每次调用时LoadLibrary ,该DLL有不同的文件名。 该DLL每次需要加载它,确保您使用的名称是从DLL的加载任何情况下不同的时间复制到一个临时文件。

我赞同上面鼓励您的意见重新设计的系统架构。



Answer 2:

不能多次加载相同的DLL到一个单一的处理(或不并具有任何效果)。

从您的意见,该DLL确实取决于函数调用之一,所以你需要使用一个“会话”系统,你保存数据的单独设置每个并根据需要(通过另一个电话)创建它们,并通过一个手柄不同的事情或类似的每个函数调用。 这是大多数Win32 API的作品(文件句柄,窗口句柄,GDI对象等)的方式

如果您在DLL中的COM主机和使用COM对象,那么这将每一个类实例被自动处理。

如果你想使用一个单独的进程,那么你可以通过让刚刚推出来托管DLL和使用的IPC的多种形式之一与它通信的新工艺只是做到这一点。



Answer 3:

你对待像一个对象实例的DLL。 这不是在所有的DLL是如何工作的。 DLL是不是对象,他们是一串代码和资源。 这些东西不改变,无论你有多少次在理论上可以加载DLL。 因此,存在将是具有在相同的过程中加载的DLL的多个实例没有意义的。

这就是为什么全局变量往往是一个坏主意,一个很好的例子。 数据需要能够根据需要进行实例化。

所以,如果你需要一个对象一起工作的多个实例,你应该设计的DLL来这样做。 正如其他人所说,某种会话,或者只是一些对象,您可以实例只要你想。

这是一个抽象的答案,一个抽象的问题。 这将有很大的帮助,如果你能解释一下这是什么DLL不正是,为什么你需要它的多个实例。



文章来源: Load the same dll multiple times [closed]