我有一个动态链接库(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不应传递给调用的可执行文件,也不应从调用的可执行文件接收以下任何内容:
但是扩展DLL页面显示
客户端可执行文件必须是用_AFXDLL定义的MFC应用程序,而A.dll不能是MFC应用程序。
在这种情况下使用常规DLL是否有问题?
谢谢,
布莱恩
发布于 2011-07-01 10:42:31
也许我误解了,但是如果A不能使用MFC,而B提供了一个类,那么如何在A中实例化一个对象?您是否希望B有一个创建对象并通过指针传递给A的工厂函数?在这种情况下,您需要确保对其调用delete(),而不是A,因为它们有两个不同的堆。
这是一个COM对象还是您所说的“导入库”是什么意思?我们是用.lib中的存根来讨论“常规”dll方式,还是使用“导入库”.tlb?(与我认为的问题无关,我只是想想象一下情况。)
发布于 2011-06-30 22:34:33
正常的DLL似乎是正确的选择。
常规DLL的主要关注点是,如果将其加载到MFC应用程序中,则会有两个MFC的独立副本和所有元数据。您找到的建议是为了确保元数据查找不会出现错误副本而编写的。在你的场景中没有问题。
https://stackoverflow.com/questions/6541673
复制相似问题