Delphi 如何使多个DLL实例能够相互访问?

Delphi 如何使多个DLL实例能够相互访问?,delphi,dll,loadlibrary,Delphi,Dll,Loadlibrary,我正在从头开始设计一个模块化的软件基础设施,不同的DLL包含不同的业务逻辑和应用程序逻辑。每个DLL都有自己的初始化/取消初始化机制,通过公共DLL调用进行初始化 假设我有一个主机应用程序,它使用这些不同的DLL。所有这些DLL都由主机应用程序通过LoadLibrary加载和初始化。当一个DLL初始化时,它会实例化一些内部全局变量。我是否可以使用另一个DLL连接到此DLL并访问同一实例,而无需通过主机路由?当然,从另一个DLL中调用LoadLibrary会创建另一个实例,而直接调用DLL也不会被

我正在从头开始设计一个模块化的软件基础设施,不同的DLL包含不同的业务逻辑和应用程序逻辑。每个DLL都有自己的初始化/取消初始化机制,通过公共DLL调用进行初始化

假设我有一个主机应用程序,它使用这些不同的DLL。所有这些DLL都由主机应用程序通过
LoadLibrary
加载和初始化。当一个DLL初始化时,它会实例化一些内部全局变量。我是否可以使用另一个DLL连接到此DLL并访问同一实例,而无需通过主机路由?当然,从另一个DLL中调用
LoadLibrary
会创建另一个实例,而直接调用DLL也不会被初始化/实例化

如何从一个DLL访问由同一主机应用程序初始化的实例化数据

例如,数据库连接。我用获取/执行等方法将ADO连接封装在一个DLL中。我希望一个DLL使用与此DB DLL中主机应用实例化的连接相同的连接。

库(DLL模块)在一个进程中共享。库的全局变量只有一个实例。在已加载的DLL上调用LoadLibrary时,将向已加载的模块返回模块句柄。单个DLL只能加载一次到进程中

所以,使用LoadLibrary然后调用该库的函数是非常好的


另外,如果您确定库已经加载,则可以使用GetModuleHandle。例如,您永远不需要为内核32调用LoadLibrary,因为它总是被加载的。

。。将创建另一个实例..-如果你不腾出图书馆就不会。可执行文件加载库后,其他库将使用已映射到可执行文件地址空间的实例。您可以通过导出的函数将全局数据导出到其他库和可执行文件,只要不释放库,它就不会再次初始化。库不是独立运行的,它实际上是其中运行代码的可执行程序。只是澄清一下:加载已加载DLL的新可执行程序将重复使用相同的代码,但不会重复使用相同的数据(除非在共享数据段中声明—Delphi不允许定义)。