【发布时间】:2010-09-10 05:20:00
【问题描述】:
我们当前的应用程序是一个包含多个页面的 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——即使我们的客户正在使用它。
【问题讨论】:
标签: c++ windows visual-studio-2008 dll windows-xp