转发声明HINSTANCE和朋友

abe*_*thy 7 c++ winapi hinstance

有没有办法HINSTANCE从WinAPI 转发声明类型而不包括完整(和大)windows.h标题?

举例来说,如果我有一个类RenderWindow拥有的HINSTANCE mInstance,我将不得不包括windows.hRenderWindow.h.因此,所需的一切RenderWindow也必须包括在内windows.h.

我试过包括,windef.h但这似乎需要一些东西windows.h.:-(如果我不能转发声明它,是否至少有一种可移植的方式来使用像long mInstancein RenderWindow而不是HINSTANCE

Ala*_*ist 6

HINSTANCE在WinDef.h中声明为typedef HINSTANCE __*HINSTANCE;

您可以在标题中写下:

#ifndef _WINDEF_
class HINSTANCE__; // Forward or never
typedef HINSTANCE__* HINSTANCE;
#endif
Run Code Online (Sandbox Code Playgroud)

当不包含WinDef.h时,您将获得引用HINSTANCE的编译错误.

  • 这不是黑客,编写 Windef.h 是为了允许它:-) 声明类而不是结构会保证如果稍后包含 Windef.h 会出现编译器错误,这意味着错误的文件结构设计。 (3认同)
  • 那是我正在寻找的黑客,非常聪明!(`HINSTANCE__`似乎是MSVC2005上的`struct`) (2认同)
  • 如果您需要*this*编译单元中的Windows.h,请首先将其作为其他库标题包含在您自己的之前. (2认同)

Han*_*ant 5

您可以将其声明为 void* 并消除错误。但这几乎是一场永无休止的战斗,迟早你会被绊倒。使用预编译头文件,这样你就不用关心 windows.h 的大小

stdafx.h:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
Run Code Online (Sandbox Code Playgroud)