2010-04-04 15 views
5

HINSTANCE türünü tam (ve büyük) windows.h başlığını eklemeden WinAPI'den bildirme yolu var mı? Bir HINSTANCE mInstance sahibi bir sınıf RenderWindow varsaForward declare HINSTANCE ve arkadaşlar

Örneğin, ben RenderWindow.h içinde windows.h dahil etmek gerekir. Yani RenderWindow'a ihtiyaç duyan her şeyin de windows.h içermesi gerekiyor.

windef.h'u dahil etmeyi denedim ancak bu, windows.h'dan bazı şeylere ihtiyaç duyuyor gibi görünüyor. Ben öne beyan yapamıyorsanız :-(, RenderWindow yerine HINSTANCE yılında?

+0

Aslında windows.h dahil olmak üzere herhangi bir sorun neden oluyor mu? –

+1

doğrudan değil, ama ben de dahil olmaktan hoşlanmıyorum çünkü bazen 'min' ve 'max' makrolarını undefine etmek zorunda kalıyor ve derleme zamanını/aralığını artırdığını düşünüyorum. – abenthy

+2

'#define NOMINMAX' önce' 'yi dahil etmeden. –

cevap

4

HINSTANCE, WinDef.h dosyasında yazılmıştır HINSTANCE __ * HINSTANCE;

Sen başlıklarında yazabilirsiniz: WinDef.h dahil değilken

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

Bir HINSTANCE başvuran derleme hataları alırsınız.

+2

Aradığım hack, çok akıllıca! ('HINSTANCE__'' MSVC2005'de' struct' burada görünüyor] – abenthy

+1

Bu hack yok, Windef.h izin vermek için yazılmıştır :-) Bir struct yerine bir sınıf bildirmek Windef.h daha sonra dahil edilirse, bir derleyici hatası garanti eder. Kötü dosya yapı tasarımı anlamına gelir. –

+1

Görüyorum, ancak eğer sınıf kullanırsam daha sonra 'windows.h' içerdiğimi uygulamamda 'windows.h' içeriyorsa bir derleyici hatası alıyorum. Bir başlık dosyasında typedef önerdiğini kullanmak için kötü bir dosya yapısı var mı ve ilgili kaynak dosyada 'windows.h' içeriyor mu? – abenthy

3

Sen * hükümsüz ilan ve hatalar Yayınlayabilmemiz olabilir. Bu yakındır long mInstance gibi bir şey kullanmak için taşınabilir bir yolu en azından orada hiç bitmeyen savaş olsa, er ya da geç takıldı alırsınız Eğer windows.h

stdafx.h boyutu umurumda değil bu yüzden önceden derlenmiş başlıkları kullanın:.

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
3

For example, if I have a class RenderWindow which owns an HINSTANCE mInstance , i will have to include windows.h in RenderWindow.h . So everything that needs RenderWindow also has to include windows.h .

Pimpl idiom? Bu, özel üyeleri gizlemenize olanak tanır. Bir yan etki, başlıklarını sınıfınızın başlığına eklemeniz gerekmez.

+0

Yup, Pimpl, ben genelde böyle yaparım. – jalf

+0

Öneriniz için teşekkürler. Alain Rist'in çözümünü tercih ettiğimi asla söylemem. – abenthy

İlgili konular