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

将EXE数据传递给一个或多个DLL,第1张

概述将EXE数据传递给一个或多个DLL

我们当前的应用程序是包含多个页面的单个OpenGL EXE。 EXE负责访问通过UDP在networking上发送的数据。 它累积数据并将其存储在一系列单例结构中。 EXE中的单个页面访问单身结构来处理他们认为合适的数据。

为了减轻我们的EXE足迹,并支持我们在configurationpipe理方面的尝试,我们决定将这些页面分成一个EXE加载的DLL。 我们打算让EXE成为从DLL中加载页面的shell。 EXE仍然具有所有的通信责任(UDP,Corba,用户等)。 页面仍将负责显示他们所做的任何事情。

这个问题(最后)变成:我如何将从EXE收集的大量数据传递给耗费的基于DLL的页面。 Singleton概念不再持有水,因为我们使用的单身(ACE_Singleton)不允许这样的方向。 我们可以整天将DLL中的单例从DLL中导出到耗费的EXE中,但是我还没有弄明白。 我已经提出了以下选项 – 我不喜欢这些选项,所以我希望有人会有更好的一个:)

将当前存储在单独单例中的所有数据汇总到另一个将导出“真实”单例的DLL中。 例如。 从DLL导出的单例将是相同的 – 不pipe是什么EXE加载它 – 有点像共享内存。 这是一个有趣的select,但会导致我们的部署scheme出现问题。 如果人们真的被这个想法所打动,我可以详细讨论这些问题。

创build一个包含所有相关数据的静态DLL级别结构。 EXE会在加载DLL时将这些数据下推到DLL中,这样DLL中包含的页面就可以访问数据。 这似乎是最简单的解决scheme – 即使它需要编辑我们的应用程序中的每一个页面 – 超过100个。它也似乎有点草率。 所有的数据只是在全球范围内。 不是很性感或者C ++ y。

那么,其他任何人都有解决这个问题?

如何跟踪使用的DLL(这是所谓的DLL地狱?)

你如何获得一个全局variables被实例化为win32下C ++的第一件事情?

退出无法设置错误代码

停止同步windows 2008 R2时钟

使用Visual Studio 2008编译的C ++ dll可以用于Visual Studio 2005吗?

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

为什么我的visual studio 2k8 C ++项目不能使用unicode字符?

什么是named.exe进程以及如何避免消耗高cpu速率

exe文件的大小vs可用内存

有效地等待标志状态改变而不阻塞资源?

build立控制台应用程序没有CRT&默认标题?

给所有的DLL一个函数SetglobalDataPointer(Singleton *)。 在您调用任何其他DLL函数之前,您的EXE调用此函数。 在DLL代码中,替换Singleton的所有发生。 由theingletonPtr->

你可以:

把所有的东西放在最外层的shell里面,

使用DEF文件从您的EXE生成导出函数。

第二个是非常罕见的,但是可以从DEF文件中生成一个导入库。 使用liB / DEF来生成导入库。 请参阅使用导入库和导出文件 。

不幸的是,这听起来像你有很多现有的代码修补。 在这种情况下,我只是和(2)一起去,假设它不太大,笨拙。

从你的描述来看,这听起来像EXE级别的数据只需要在DLL加载时发送一次。

如果(2)太乱了,我会重构它有一点与Serialize / UnSerialize()函数的基础“DLLPage”类。 永远不要输出类本身,只输出你需要的单个函数(当类更改时,这会有很大帮助…类级输出会出现非常奇怪的中断)。 您将需要构造函数/析构函数,并可能需要每个公共成员。

可能会有一些堆管理问题,所以我也想重载新/删除,并让所有的类都使用位于助手DLL中的集中的新/删除。

在开始尝试打破EXE之前,您应该阅读内存管理和DLL。

这里有一篇讨论CRT对象问题的文章,但是同样的事情适用于你自己的C ++对象。

通过DLL边界传递CRT对象的潜在错误

第一个选项:把所有的exe数据保存在共享内存中。 只要你有适当的锁定,dll就可以高兴地访问它。

第二种选择:使用导出的函数指针将内存传输到dll – exe有一个函数,dll调用exe中的另一个函数,该函数将该函数作为指针返回,然后dll可以调用该函数。 该导出的函数可以将数据作为堆栈上的普通结构传输。

第三个选项:如果您使用相同的运行时,只需导出一个指针,让您直接访问内存。

总结

以上是内存溢出为你收集整理的将EXE数据传递给一个或多个DLL全部内容,希望文章能够帮你解决将EXE数据传递给一个或多个DLL所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264552.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存