gpt4 book ai didi

c++ - 将 EXE 数据传递给一个或多个 DLL

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:01 25 4
gpt4 key购买 nike

我们当前的应用程序是包含多个页面的单个 OpenGL EXE。 EXE 负责访问通过 UDP 通过网络发送的数据。它累积数据并将其存储在许多单例结构中。 EXE 中的各个页面访问单例结构以按它们认为合适的方式处理数据。

为了减轻我们的 EXE 足迹并支持我们在配置管理方面的尝试,我们决定将页面拆分成一个 DLL,EXE 将加载该 DLL。我们打算让 EXE 成为 shell,DLL 的页面将加载到其中。 EXE 仍将承担所有通信责任(UDP、Corba、用户等)。页面仍将负责显示它们所做的一切。

问题(最终)变成了:如何将从 EXE 收集的大量数据传递给基于 DLL 的消费页面。单例概念不再适用,因为我们使用的单例 (ACE_Singleton) 不允许这种级别的方向。我们可以整天将单例从 DLL 导出到正在使用的 EXE,但我还没有想出相反的方法。我提出了以下选项 - 我不喜欢其中一个,所以我希望那里的人会有更好的选项:)

  1. 将当前存储在单独单例中的所有数据打包到另一个 DLL 中,该 DLL 将导出“真正的”单例。例如。从 DLL 导出的单例将是相同的——无论加载它的是什么 EXE——有点像共享内存。这是一个有趣的选择,但会导致我们的部署场景出现问题。如果人们真的被这个想法迷住了,我可以详细介绍这些问题。
  2. 创建包含所有相关数据的静态 DLL 级结构。 EXE 会在 DLL 加载时将此数据向下推送到 DLL,以便 DLL 中包含的页面可以访问这些数据。这似乎是最简单的解决方案——即使它需要编辑我们应用程序中的每一页——超过 100 个。它似乎也有点草率。所有的数据都只是在一个全局的。也不是很性感或 C++y。

那么,还有其他人可以解决这个问题吗?

该应用程序是使用 Visual C++ 9.0 (VisualStudio 2008) 编写的,适用于 Windows XP。由于某些原因,我们的实验室还不支持 Vista——尽管我们的客户正在使用它。

最佳答案

为所有 DLL 提供函数 SetGlobalDataPointer(Singleton*)。您的 EXE 在调用任何其他 DLL 函数之前调用此函数。在 DLL 代码中,替换所有出现的 theSingleton。通过 theSingletonPtr->

关于c++ - 将 EXE 数据传递给一个或多个 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/84626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com