首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >常规dll与扩展dll

常规dll与扩展dll
EN

Stack Overflow用户
提问于 2011-06-30 22:08:49
回答 2查看 2.1K关注 0票数 2

我有一个动态链接库(A.dll),它使用ATL的内容,并且不能在其中使用MFC。不过,它需要一些东西,所以我制作了一个名为MFC规则DLL的B.dll,它由A.dll (通过导入库)在运行时自动加载。

A需要的B.dll的一部分是在B.dll中定义的类(foo),类中有一些使用MFC的东西。允许我在A.dll中创建foo对象吗?B需要成为扩展DLL吗?

正常的DLL页面说:

常规DLL中的所有内存分配都应保留在DLL中;DLL不应传递给调用的可执行文件,也不应从调用的可执行文件接收以下任何内容:

  • 指向MFC对象的指针
  • 指向MFC分配的内存的指针

但是扩展DLL页面显示

客户端可执行文件必须是用_AFXDLL定义的MFC应用程序,而A.dll不能是MFC应用程序。

在这种情况下使用常规DLL是否有问题?

谢谢,

布莱恩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 10:42:31

也许我误解了,但是如果A不能使用MFC,而B提供了一个类,那么如何在A中实例化一个对象?您是否希望B有一个创建对象并通过指针传递给A的工厂函数?在这种情况下,您需要确保对其调用delete(),而不是A,因为它们有两个不同的堆。

这是一个COM对象还是您所说的“导入库”是什么意思?我们是用.lib中的存根来讨论“常规”dll方式,还是使用“导入库”.tlb?(与我认为的问题无关,我只是想想象一下情况。)

票数 1
EN

Stack Overflow用户

发布于 2011-06-30 22:34:33

正常的DLL似乎是正确的选择。

常规DLL的主要关注点是,如果将其加载到MFC应用程序中,则会有两个MFC的独立副本和所有元数据。您找到的建议是为了确保元数据查找不会出现错误副本而编写的。在你的场景中没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6541673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档