Вперед объявите HINSTANCE и друзей

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

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

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

7
задан abenthy 4 April 2010 в 13:43
поделиться

3 ответа

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

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

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

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

6
ответ дан 6 December 2019 в 21:11
поделиться

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

stdafx.h:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
3
ответ дан 6 December 2019 в 21:11
поделиться

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

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

3
ответ дан 6 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: