1

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

假设我有一个使用这些不同 DLL 的主机应用程序。所有这些 DLL 都由主机应用程序通过LoadLibrary. 当一个 DLL 初始化时,它会实例化一些内部全局变量。我可以使用另一个 DLL 连接到这个 DLL 并在不通过主机路由的情况下访问同一个实例吗?当然LoadLibrary从另一个 DLL 中调用会创建另一个实例,并且直接调用 DLL 也不会被初始化/实例化?

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

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

4

1 回答 1

3

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

因此,您可以使用 LoadLibrary 然后调用该库的函数。

作为替代方案,如果您确定库已经加载,您可以使用 GetModuleHandle。例如,您永远不需要为 kernel32 调用 LoadLibrary,因为它总是被加载。

于 2013-09-11T06:51:19.967 回答