谁包括谁来获得定义?
Posted
技术标签:
【中文标题】谁包括谁来获得定义?【英文标题】:Who has included whom to get definition? 【发布时间】:2014-10-01 10:18:11 【问题描述】:我有基于MFC
应用程序的简单对话框。它包含变量HWND blabla
。 HWND
在 windef.h
中定义。我在我的代码中没有看到任何包含 windef.h
的内容。可能的其他标题会这样做。
现在我需要创建带有HWND blabla
变量的hello world MFC
对话框应用程序。我希望HWND
的定义与第一个应用程序中的定义相同。
如何知道谁包含谁在第一个应用程序中获取HWND
定义?
是否有任何工具可以检索这些信息?
【问题讨论】:
#include "windows.h"
msdn.microsoft.com/en-us/library/hdkef6tk.aspx
最简单的方法:使用向导开始您的新项目,确保选择您将使用 MFC。
【参考方案1】:
当您使用 mfc 时,windows 头文件都包含在 afxwin.h 或 afx.h 头文件中。
也永远不要将 windows.h 单独包含在 MFC 项目中。 也不包括windef.h,总是包括windows.h,没有其他头文件。【讨论】:
这是关于 MFC 的最大 WTF 之一,因为您可能想要包含非 MFC 但使用 Win32 并且需要包含 windows.h 的标头 为什么?哪里有问题?随意并在不使用 MFC 的 cpp 文件中仅包含 windows.h。即使使用预编译的头文件,您也能找到一种方法。只需为特定文件禁用此功能或使用您自己的。 ... 你也可以随时包含 windows.h,随心所欲。但如果需要,必须始终首先包含 afx.h! 预编译的头痛是一个更大的 WTF。如果编译单元不使用它,为什么它应该是一个致命错误。它只是为了让编译时间更快。 为使用他们的公司工作的人。或者通常被滥用。以及当常规 DLL 足够时可能会过度使用 COM。【参考方案2】:有一种非常简单的方法可以查看所有包含的内容。只需在项目属性中选择 配置属性 -> C/C++ -> 显示包含 = /showIncludes 并构建您的项目。在构建输出中,您将看到您需要的所有信息。在你的情况下,windef.h 路径:
stadfx.h -> afxwin.h -> afx.h -> afxver_.h -> afxv_w32.h -> windows.h -> windef.h
【讨论】:
以上是关于谁包括谁来获得定义?的主要内容,如果未能解决你的问题,请参考以下文章