2010-11-08 3 views
7

Wie kann ich Deklaration HANDLE weiterleiten? Ich möchte nicht alle windows.h in diesem bestimmten Header enthalten.Wie führe ich DEPLINE GRIFF weiter? (Win32)

+0

Ist '#define HANDLE int 'nicht genug? – ruslik

+1

@ruslik: HANDLE ist kein 'int'. Insbesondere glaube ich, dass es die gleiche Breite wie ein Zeiger hat. –

+0

@Billy ist eigentlich ein Index in einige Tabellen im Kernelraum. Und überhaupt müssen Sie keine Berechnungen anstellen. – ruslik

Antwort

4

Der Header, der tatsächlich typedefs HANDLE ist winnt.h. Leider sind das 15K Zeilen - hier, also ist es ein bisschen irreführend, das Problem zu beheben, indem man die Slimline windef.h mit einbezieht.

Hier ist der relevante Teil auf meinem System (natürlich die Einzelheiten von Revision zu Revision ändern könnten, werden aber nicht auf der Ebene der Umsetzung ändern, da diese bestehenden Binaries brechen würde):

// 
// Handle to an Object 
// 

#ifdef STRICT 
typedef void *HANDLE; 
#if 0 && (_MSC_VER > 1000) 
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name 
#else 
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name 
#endif 
#else 
typedef PVOID HANDLE; 
#define DECLARE_HANDLE(name) typedef HANDLE name 
#endif 
typedef HANDLE *PHANDLE; 

PS gotta love dass #if 0 in diesem Versand Microsoft-Header-Datei.

+1

Wahrscheinlich, um einen Compiler-Fehler zu umgehen. –

+1

@Billy - so zynisch ... ;-) –

2

Nun, sieht aus wie ich selbst antwortete. Ich nur #include ed <windef.h> anstelle von <windows.h> für jetzt. Ich möchte immer noch in der Lage sein, nur GRIFF zu deklarieren, wenn jemand einen Weg hat, dies zu tun.

+1

Lookup jedoch ist es in windef.h definiert und kopieren Sie die Definition. Windows ist ein fester permanenter ABI. Es ist kein offener Standard oder etwas, wo Sie sich um die Portabilität für verschiedene Implementierungen kümmern müssen. –

+1

Ich habe das gleiche gemacht, aber ich bekomme eine Fülle von Compiler-Fehlern von 'winnt.h'. Irgendeine Idee warum? – CinCout

Verwandte Themen