繁体   English   中英

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

[英]Load two instances of the same DLL in Delphi

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

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

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

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

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

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

我不认为这是可能的。

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

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

我有一些代码本来是从绑定到可执行文件的资源加载一个DLL但我想也可以对一个充满文件内容的内存区域做同样的事情。 我看不出为什么它不会工作两次,但我没有测试过它。

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

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

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

有很多箍你现在可以:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM