非 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 相关错误的主要内容,如果未能解决你的问题,请参考以下文章
WTL强制资源从非mfc应用程序中的dll加载的方式? (我们使用的是 WTL/ATL,不是直接的 win32)
MFC .exe 和 .dll 为相同的代码产生不同的结果 [关闭]
VS2017 新建MFC项目时只有ATL选择,怎么才能建有窗体的MFC?