我有一个使用ATL的DLL(a.DLL),但其中不能有MFC。不过它需要一些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有问题吗?
谢谢,
Bryan
也许我误解了,但如果A不能使用MFC,而B提供了一个可以使用MFC的类,那么如何在A中实例化对象?你想让B有一个工厂函数来创建对象并通过指针将其传递给a吗?在这种情况下,您需要确保B对其调用delete(),而不是A,因为它们将有两个不同的堆。
这是COM对象还是"导入库"的意思?我们谈论的是带有.lib中存根的"常规"dll方式,还是"导入库".tlb?(我认为这对问题并不重要,我只是想描绘一下情况)。
看起来常规DLL是正确的选择。
常规DLL的主要问题是,如果将其加载到MFC应用程序中,则会有MFC和所有元数据的两个独立副本。您找到的建议是为了确保元数据查找不会转到错误的副本。在你的场景中不是问题。