我们当前的应用程序是一个包含多个页面的单个 OpenGL EXE。EXE 负责访问通过 UDP 通过网络发送的数据。它累积数据并将其存储在许多单例结构中。EXE 中的各个页面访问单例结构以按照它们认为合适的方式处理数据。
为了减轻我们的 EXE 占用空间并支持我们在配置管理方面的尝试,我们决定将页面拆分为一个单独的 DLL,EXE 将加载该 DLL。我们的目的是让 EXE 成为加载 DLL 页面的 shell。EXE 仍将承担所有通信职责(UDP、Corba、用户等)。这些页面仍将负责显示它们所做的任何事情。
问题(最终)变成了:如何将这些从 EXE 收集的无数数据传递到基于 DLL 的消费页面。单例概念不再成立,因为我们使用的单例 (ACE_Singleton) 不允许这种级别的方向。我们可以整天将单例从 DLL 导出到消耗的 EXE,但我还没有弄清楚相反的情况。我想出了以下选项-我都不喜欢,所以我希望那里的人会有更好的选择:)
- 将当前存储在单独单例中的所有数据包装到另一个 DLL 中,该 DLL 将导出“真正的”单例。例如。从 DLL 导出的单例将是相同的 - 无论 EXE 加载了什么 - 有点像共享内存。这是一个有趣的选择,但会导致我们的部署方案出现问题。如果人们真的被这个想法迷住了,我可以详细讨论这些问题。
- 创建一个包含所有相关数据的静态 DLL 级结构。EXE 会在 DLL 加载时将此数据下推到 DLL,以便 DLL 中包含的页面可以访问数据。这似乎是最简单的解决方案——即使它需要编辑我们应用程序中的每一页——超过 100 个。它也似乎有点草率。所有数据都在一个全局范围内。也不是很性感或 C++y。
那么,还有其他人有解决这个问题的方法吗?
该应用程序使用 Visual C++ 9.0 (VisualStudio 2008) 编写,可在 Windows XP 上使用。出于某种原因,我们的实验室还不支持 Vista——即使我们的客户正在使用它。