Вперед объявить HINSTANCE и друзей - PullRequest
7 голосов
/ 04 апреля 2010

Есть ли способ для прямого объявления типа HINSTANCE из WinAPI без включения полного (и большого) заголовка windows.h?

Например, если у меня есть класс RenderWindow, которому принадлежит HINSTANCE mInstance, я должен буду включить windows.h в RenderWindow.h. Так что все, что нужно RenderWindow, также должно включать windows.h.

Я пытался включить windef.h, но, похоже, нужны некоторые вещи из windows.h. :-( Если я не могу заранее объявить это, есть ли хотя бы портативный способ использовать что-то вроде long mInstance в RenderWindow вместо HINSTANCE?

Ответы [ 3 ]

6 голосов
/ 04 апреля 2010

HINSTANCE объявлено в WinDef.h как typedef HINSTANCE __ * HINSTANCE;

Вы можете написать в своих заголовках:

#ifndef _WINDEF_
class HINSTANCE__; // Forward or never
typedef HINSTANCE__* HINSTANCE;
#endif

Вы получите ошибки компиляции со ссылкой на HINSTANCE, если WinDef.h не включен.

3 голосов
/ 04 апреля 2010

Например, если у меня есть класс RenderWindow, которому принадлежит HINSTANCE mInstance, я должен буду включить windows.h в RenderWindow.h. Поэтому все, что нужно RenderWindow, также должно включать windows.h.

Вы смотрели на Пимпл идиома ? Это позволяет скрывать частных пользователей. Побочным эффектом является то, что вам не нужно включать их заголовки в заголовок вашего класса.

3 голосов
/ 04 апреля 2010

Вы можете объявить его недействительным * и отбросить ошибки. Это близко к бесконечной битве, хотя, рано или поздно, вы получите путаницу. Используйте предварительно скомпилированные заголовки, чтобы не заботиться о размере windows.h

stdafx.h:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...