【发布时间】:2011-02-04 04:43:28
【问题描述】:
有没有办法从 WinAPI 前向声明 HINSTANCE 类型而不包括完整(和大)windows.h 标头?
例如,如果我有一个拥有HINSTANCE mInstance 的类RenderWindow,我将不得不在RenderWindow.h 中包含windows.h。所以所有需要RenderWindow的东西也必须包括windows.h。
我尝试包含windef.h,但这似乎需要windows.h 的一些东西。 :-(如果我不能转发声明它,是否至少有一种可移植的方式在RenderWindow中使用long mInstance之类的东西而不是HINSTANCE?
【问题讨论】:
-
包含 windows.h 是否真的会给您带来任何问题?
-
不是直接的,但我不喜欢包含它,因为有时必须取消定义
min和max宏,我认为它会增加编译时间/查找等。 -
#define NOMINMAX之前包括<windows.h>。 -
我可以想出六个很好的理由来避免包含它。 min/max,常用名称的宏(例如 CreateWindow),以及它不能编译为 C++ 的事实。您必须启用 Microsoft 的语言扩展。 windows.h 在各方面都表现不佳。
-
对于那些登陆这里寻找用 C 指针类型 void * 替换 HINSTANCE 的人(我现在放弃)有一个 heated discussion about its opacity。