这是我的问题:我想创建同一DLL的两个独立实例。
以下不起作用,因为Handle1和Handle2将获得相同的地址
Handle1 := LoadLibrary('mydll.dll');
Handle2 := LoadLibrary('mydll.dll');
以下工作,但我必须复制DLL并将其重命名为其他东西(这看起来有点傻)
Handle1 := LoadLibrary('mydll.dll');
Handle2 := LoadLibrary('mydll2.dll');
有没有办法只有一个DLL文件,但加载它的几个实例?
答案 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对它有很多了解。)
现在有很多箍: