2010-04-04 3 views
5

전체 (큰) windows.h 헤더를 포함하지 않고 WinAPI를에서 HINSTANCE 유형을 전달-선언하는 방법이 있나요 HINSTANCE 친구를 선언?앞으로

예를 들어, HINSTANCE mInstance을 소유 한 클래스 RenderWindow이있는 경우 을 RenderWindow.h에 포함해야합니다. 따라서 RenderWindow이 필요한 모든 항목에는 windows.h도 포함되어야합니다.

나는 windef.h를 포함하여 시도했지만이 windows.h에서 몇 가지를해야 할 것으로 보인다. 나는 앞으로를 선언 할 수없는 경우 :-(, RenderWindow 대신 HINSTANCE에?

+0

windows.h를 포함하면 실제로 문제가 발생합니까? –

+1

직접,하지만 난 하나에 때때로 UNDEFINE'min'와'max' 매크로를 가지고 있기 때문에 그것을 포함 싫어하지와 나는/컴파일 시간''를 포함하기 전에 등 – abenthy

+2

'#DEFINE의 NOMINMAX'를 찾아 증가 생각합니다. –

답변

4

HINSTANCE는 HINSTANCE __ * HINSTANCE 타입 정의 WinDef.h로 선언되고

당신은 당신의 헤더에 쓸 수 있습니다 : WinDef.h가 포함되지 않은 경우

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

당신은 HINSTANCE를 참조 컴파일 오류를 얻을 것이다.

+2

그게 내가 찾고 있던 해킹이야, 아주 영리 해! 어떤 해킹, Windef.h 대신 구조체의 클래스를 선언 :-) 그것을 허용에 기록되지 않은 것 – abenthy

+1

('HINSTANCE__'는'MSVC2005 여기 struct' 것 같다) Windef.h 나중에 포함 된 경우, 컴파일러 오류를 보장하는 나쁜 파일 구조 디자인을 의미합니다. –

+1

만약 내가'windows.h'를 필요로하는 구현 파일에'windows.h'를 나중에 포함 시키면 컴파일러 에러가 발생합니다. 그것은 잘못된 파일 구조를 사용하여 헤더 파일에 typedef를 제안하고 해당 소스 파일에'windows.h'를 포함합니까? – abenthy

3

당신은 * 무효를 선언하고 오류 멀리 캐스팅 할 수있다. 이것은 가까운 long mInstance 같은 것을 사용하는 휴대용 방법은 적어도이 끝없는 전투는하지만, 조만간 당신은 난처거야 당신이 WINDOWS.H

에 stdafx.h의 크기에 대해 걱정하지 않도록 미리 컴파일 된 헤더를 사용합니다.

#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 .

을 보셨나요?? 이렇게하면 비공개 멤버를 숨길 수 있습니다. 부작용은 클래스 머리글에 헤더를 포함 할 필요가 없다는 것입니다.

+0

그래, Pimpl은 내가 보통 이렇게하는 법이다. – jalf

+0

제안 해 주셔서 감사합니다. 나는 알랭리스트 솔루션을 선호한다고 말할 필요가 없다. – abenthy