谁包括谁来获得定义?

Posted

技术标签:

【中文标题】谁包括谁来获得定义?【英文标题】:Who has included whom to get definition? 【发布时间】:2014-10-01 10:18:11 【问题描述】:

我有基于MFC 应用程序的简单对话框。它包含变量HWND blablaHWNDwindef.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

【讨论】:

以上是关于谁包括谁来获得定义?的主要内容,如果未能解决你的问题,请参考以下文章

三.绑定方法与非绑定方法

26 绑定方法与非绑定方法

数据模型无法复用?归根到底谁来“背锅”?

Python面向对象

数据模型无法复用?归根到底谁来“背锅”?

数据模型无法复用?归根到底谁来“背锅”?