非 MFC ATL 项目 (dll) 产生 MFC 相关错误

Posted

技术标签:

【中文标题】非 MFC ATL 项目 (dll) 产生 MFC 相关错误【英文标题】:Non MFC ATL project (dll) produces MFC related errors 【发布时间】:2013-09-29 20:20:11 【问题描述】:

我创建了一个干净的(非 MFC)atl 项目, 添加了一个对话框和一些位图,编译时出现 3 个 MFC 相关错误:

WINDOWS.H 已经包含在内。 MFC 应用程序不得#include @afxv_w32.h

使用 /MD[d] 构建 MFC 应用程序(CRT dll 版本) 需要 MFC 共享 dll 版本。请#define _AFXDLL 或不要使用 /MD[d]@afx.h

既然这个项目与 MFC 无关 - 为什么会出现这些错误? (在项目设置中:“使用 MFC”= 使用标准 Windows 库。

我检查了预处理器的定义: WIN32 _视窗 _调试 _USRDLL

这里也没有。

有什么想法吗?

更新:我发现我做错了什么。我没有从类向导中添加对话框,而是在资源视图中创建了它,然后添加了一个类。这将创建一个 MFC 类而不是 ATL 类。

【问题讨论】:

您看到不知何故包含了 MFC。 (添加对话框时?或通过#include)。非 MFC 项目不会发生这种情况。 刚刚添加了一个对话框,ATL 对话框,没有什么我以前没有做过的。我在类似的项目中做过不止一次。我正在比较,这次没有发现任何不同。 使用/showIncludes 编译器选项找出为什么包含<afxv_w32.h> 并从那里开始工作。 我看到了包含,我不知道是什么原因造成的。看来我必须在每一步之后重新开始并重新编译,以找出触发此错误的原因.... 【参考方案1】:

我发现出了什么问题,在这里更新,以供将来的用户使用,因为 ATL 的文档非常差。

我在资源视图中添加了一个对话框,然后为它添加了一个类。那是错误。添加的类是 MFC 类,虽然项目不应该支持 MFC。

如果您希望保持项目干净(来自 MFC),您需要通过 Class View Add Class 添加对话框,如本文所述:

Add ATL Dialog Box

如果不是 ATL,我会将其作为错误发布给 MS,但我认为他们仍然不关心这项技术。

【讨论】:

以上是关于非 MFC ATL 项目 (dll) 产生 MFC 相关错误的主要内容,如果未能解决你的问题,请参考以下文章

静态或动态链接 CRT、MFC、ATL 等

WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)

MFC .exe 和 .dll 为相同的代码产生不同的结果 [关闭]

VS2017 新建MFC项目时只有ATL选择,怎么才能建有窗体的MFC?

错误:MFC 项目无法定义 _ATL_NO_EXCEPTIONS

将非托管 C++ dll 添加到托管 C++ dll