如何将使用MFC的类添加到ATL项目?

时间:2013-03-18 09:01:11

标签: c++ dll mfc atl

我正在编写.NET分析器(DLL),我正在使用ATL。我想在我的项目中添加一些使用MFC的类,但是我遇到了很多错误,但是这些类在MFC项目中工作正常。我试图更改项目属性并设置Use of MFC = Use MFC in a shared DLL但它没有用,我还尝试包括“afx.h”......

以下是我遇到的一些错误:

Error   214 error C2373: 'CString' : redefinition; different type modifiers iaparameters.cpp    31

Error   206 error C2653: 'CIAParameters' : is not a class or namespace name iaparameters.cpp    30

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于this question,这应该是可能的。但根据我自己的经验,这样做有点棘手。您必须手动包含您正在使用的版本的MFC标头。您也可以自定义CWinApp类以启用MFC类工厂(this is默认MFC支持为您生成的内容。this也可能有帮助。

另外你应该注意到ATL 8最重要的MFC& ATL现在是shared between both libraries

如果这不起作用,最简单的方法是重新创建项目,检查 MFC支持选项并重新导入代码。这就是我最终做到这一点的方式。

最后但同样重要的是,您还应该注意ATL Internals表示您应该只在必要时使用MFC。现在,几乎所有强大的MFC助手也都是ATL的一部分。这是本书的引用。第一个原因是ATL的一大优势,最后一个更像是一个笑话:

  
      
  1. 我离不开CString(或CMapCList等等) MFC实用程序类构建为权宜之计,直到C ++标准委员会定义了一个标准库。他们已经完成了,所以我们可以停止使用MFC版本。标准库中提供的类stringmaplist等比MFC等效项更灵活,更健壮。此外,CString现在是MFC和ATL之间的共享类,因此可以在ATL项目中使用,而不必包含MFC的其余部分并链接到MFC库。其他MFC实用程序类也已共享,包括CPointCRect。对于那些喜欢MFC集合类的人来说,ATL现在包含MFC样式集合(CAtlMapCAtlList等等。)
  2.   
  3. 我不能没有巫师。 [...] ATL向导可以说与MFC提供的一样广泛。
  4.   
  5. 我已经了解MFC,我无法学到任何新知识。 [...]
  6.   

ATL为STL容器和类型提供了很好的支持。您应该考虑使用它们,而不是引用MFC。