我可以 #include 定义 DWORD 的最小 Windows 标头是什么?

2024-02-26

我自己有一个小头文件,它声明了几个函数,其中一个函数的返回类型为DWORD。我舍不得拖进去windows.h只是为了获得此类型的官方定义,因为该文件很大,并且我的标头将在许多不需要它的源模块中使用。

当然,在实践中我知道DWORD只是unsigned int,但如果可能的话,我更喜欢包含官方头文件的更卫生的方法。

On 这一页 http://msdn.microsoft.com/en-us/library/aa383751%28VS.85%29.aspx它说DWORD定义于windef.h,但不幸的是,仅包含这个小文件会直接导致编译错误 - 显然它希望被其他标头包含。 (另外,我的文件是头文件的事实也意味着我不能只声明WIN32_LEAN_AND_MEAN,因为 #includes 我的文件的源文件可能需要将其保留为未定义。)

有任何想法吗?我知道这不是世界末日——我可以继续#include <windows.h>——但我认为有人可能有更好的主意!

[EDIT]感谢您的回复。对于那些建议使用不同类型的人,让我解释一下为什么在这种情况下这是不可取的:我在不同的源文件中设置了两个函数的不同的、特定于平台的版本,并要求 CMake 配置来检测当前平台并选择要构建哪一个。在 Windows 上,我的函数如下所示:

typedef DWORD TimePoint;
TimePoint GetTimeNow(void);
double TimeDifference(TimePoint start, TimePoint end);

Windows 版本GetTimeNow()只需调用 Windows APItimeGetTime(),它有返回类型DWORD,因此它必须具有相同的返回类型。 (在其他平台上,TimePoint将有不同的类型,例如struct timeval在 UNIXy 平台上。)实际上,类型的值TimePoint是不透明的,你唯一能做的就是将其中两个传递给TimeDifference()以秒为单位测量它们之间经过的时间。这使得跨平台开发成为可能。不幸的是,这仍然意味着客户端代码必须知道具体类型TimePoint.


包含 Windows.h 并使用预编译头。顺便说一句,您可以定义 WIN32_LEAN_AND_MEAN,然后稍后取消定义!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以 #include 定义 DWORD 的最小 Windows 标头是什么? 的相关文章

随机推荐