常规dll与扩展dll



我有一个使用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和所有元数据的两个独立副本。您找到的建议是为了确保元数据查找不会转到错误的副本。在你的场景中不是问题。

最新更新