我有一个使用ATL内容的DLL(A.dll),并且不能使用MFC。虽然它有一些它需要的东西,所以我做了一个名为B.dll的MFC regular DLL,它在运行时由A.dll自动加载(通过导入库)。
A需要的B.dll部分是B.dll中定义的类(foo),并且该类中有一些使用MFC的东西。我可以在A.dll中创建一个foo对象吗? B是否需要成为扩展DLL?
常规DLL页面显示:
a内的所有内存分配 常规DLL应该保持在 DLL; DLL不应该传递给或 从调用可执行文件接收 以下任何一项:
指向MFC对象的指针
指向MFC分配的内存的指针
但扩展DLL页面显示
客户端可执行文件必须是使用_AFXDLL定义编译的MFC应用程序,并且A.dll不能是MFC应用程序。
在这种情况下使用常规DLL是否有问题?
谢谢,
布赖恩
答案 0 :(得分:1)
也许我误解了,但是如果A不能使用MFC,并且B提供了一个类,那怎么能在A中实例化一个对象呢?您是否希望B具有创建对象的工厂函数并通过指针将其传递给A?在这种情况下,你需要确保B调用它上面的delete(),而不是A,因为它们会有两个不同的堆。
这是一个COM对象,或者'import library'是什么意思?我们是用.lib中的存根或“导入库”.tlb来讨论“常规”的dll方式吗? (并不是说我认为这个问题很重要,我只想描绘一下情况)。
答案 1 :(得分:0)
看起来普通的DLL是正确的选择。
常规DLL的主要问题是,如果它被加载到MFC应用程序中,则会有两个独立的MFC副本和所有元数据。您找到的建议是为了确保元数据查找不会出错。在您的方案中不是问题。