常规dll vs扩展dll

时间:2011-06-30 22:08:49

标签: windows dll mfc

我有一个使用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是否有问题?

谢谢,

布赖恩

2 个答案:

答案 0 :(得分:1)

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

这是一个COM对象,或者'import library'是什么意思?我们是用.lib中的存根或“导入库”.tlb来讨论“常规”的dll方式吗? (并不是说我认为这个问题很重要,我只想描绘一下情况)。

答案 1 :(得分:0)

看起来普通的DLL是正确的选择。

常规DLL的主要问题是,如果它被加载到MFC应用程序中,则会有两个独立的MFC副本和所有元数据。您找到的建议是为了确保元数据查找不会出错。在您的方案中不是问题。