2

我正在编写一个 .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

任何帮助,将不胜感激。

4

1 回答 1

0

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

您还应该注意,在 ATL 8 中,最重要的 MFC 和 ATL 类现在在两个库之间共享

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

最后但同样重要的是,您还应该注意ATL Internals声明您应该只在真正需要时才使用 MFC。如今,几乎所有强大的 MFC 助手也是 ATL 的一部分。这是书中的一段话。前两个原因对 ATL 来说是一个很大的优势,最后一个更像是一个笑话:

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

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

于 2013-03-22T15:03:31.673 回答