在Delphi中加载同一DLL的两个实例

时间:2010-04-20 13:40:33

标签: delphi dll loadlibrary

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

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

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

以下工作,但我必须复制DLL并将其重命名为其他东西(这看起来有点傻)

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

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

3 个答案:

答案 0 :(得分:3)

我认为这不可能。

你必须写一个加载dll的.exe。然后你可以跨越多个进程(.exe),每个进程都会运行自己的dll实例。您必须使用IPC(进程间通信)技术与.exes进行通信。当然可行,但不是一个明智的选择。

答案 1 :(得分:1)

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

我有一些原本用于从绑定到可执行文件的资源加载dll的代码,但我想也可以对填充了文件内容的内存区域执行相同的操作。我看不出为什么它不会工作两次,但我没有测试过它。

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

它是我的库dzlib的一部分,可以在MPL下找到。

答案 2 :(得分:0)

Windows XP为Win32 DLL引入了并行执行(these guys对它有很多了解。)

现在有很多箍: