4

这是我的问题:我想为同一个 DLL 创建两个单独的实例。

以下不起作用,因为 Handle1 和 Handle2 将获得相同的地址

  Handle1 := LoadLibrary('mydll.dll');
  Handle2 := LoadLibrary('mydll.dll');

以下工作,但我必须制作 DLL 的副本并将其重命名为其他名称(这似乎有点傻)

  Handle1 := LoadLibrary('mydll.dll');
  Handle2 := LoadLibrary('mydll2.dll');

有没有办法只有一个 DLL 文件,但加载它的几个实例?

4

3 回答 3

4

我不认为这是可能的。

您必须编写一个加载 dll 的 .exe。然后,您可以跨越多个进程(.exe),每个进程都将运行自己的 dll 实例。您必须使用 IPC(进程间通信)技术与 .exe 进行通信。当然可行,但并非完全没有道理。

于 2010-04-20T17:43:25.210 回答
1

它不适用于 LoadLibrary,因为 Windows 会检查 dll 是否已经加载,并且会一次又一次地返回相同的句柄。

我有一些代码最初是为了从绑定到可执行文件的资源中加载 dll,但我想也可以对填充了文件内容的内存区域执行相同的操作。我看不出它不能工作两次的任何原因,但我没有测试过。

你可以在这里找到它: http ://svn.berlios.de/viewvc/dzchart/utilities/dzLib/trunk/src/u_dzResourceDllLoader.pas?view=markup

它是我的库 dzlib 的一部分,在 MPL 下可用。

于 2010-04-20T20:24:59.743 回答
0

Windows XP 为 Win32 DLL 引入了并行执行(这些人对此非常了解)。

有了很多箍,您现在可以:

于 2010-04-20T19:59:44.157 回答