¿Cómo reenvío declarar HANDLE
? No quiero incluir todos windows.h
en este encabezado en particular.¿Cómo reenvío declarar HANDLE? (Win32)
Respuesta
El encabezado que realmente typedefs HANDLE
es winnt.h
. Desafortunadamente, esto es 15K líneas - aquí, por lo que corregir su problema mediante la inclusión de la delgada windef.h
es un poco engañoso.
Aquí está la parte pertinente en mi sistema (obviamente los detalles podrían cambiar a partir de la revisión a revisión, pero no va a cambiar en el nivel de aplicación ya que esto rompería binarios existentes):
//
// 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 tengo amor ese #if 0
en este archivo de encabezado de envío de Microsoft.
Probablemente para solucionar un error del compilador. –
@Billy - tan cínico ... ;-) –
Bueno, parece que respondí a este yo. Solo #include
ed <windef.h>
en lugar de <windows.h>
por el momento. Todavía me gustaría poder reenviar declarar MANEJO solo si alguien tiene una manera de hacerlo.
Lookup, sin embargo está definido en windef.h y copia la definición. Windows es un ABI permanente fijo. No es un estándar abierto o algo en lo que tenga que preocuparse por la portabilidad de diferentes implementaciones. –
Hice lo mismo, pero recibo una plétora de errores de compilación de 'winnt.h'. ¿Alguna idea de por qué? – CinCout
- 1. ¿Cómo reenvío declarar una clase interna?
- 2. Jersey URL reenvío
- 3. Reenvío de puertos
- 4. ¿Cómo funciona Skype sin reenvío de puertos?
- 5. Clases estáticas en Delphi (Win32)
- 6. .NET Reenvío de puertos SSH
- 7. Reenvío de argumentos en LLVM
- 8. Cómo declarar printf()?
- 9. Evento de reenvío en FLEX
- 10. Impedir el reenvío de formularios
- 11. Cómo pelar una aplicación Win32
- 12. Importar una DLL con C++ (Win32)
- 13. Reenvío perfecto: a través de funciones virtuales
- 14. Alternativa a las declaraciones de reenvío cuando no desea #include
- 15. Barra de reenvío en Wordpress URL
- 16. Reenvío de puertos en Windows 7
- 17. cómo declarar cadenas en C
- 18. LINQ: ¿Cómo declarar IEnumerable [AnonymousType]?
- 19. Cómo declarar extern typedef struct?
- 20. ssh reenvío de puertos (tunelización) en linux
- 21. ¿Cómo deshabilitar el reenvío de puertos de adb?
- 22. ¿Cómo hago un enlace de reenvío de correo electrónico?
- 23. Imagen animada en Win32
- 24. Problema de consola Win32
- 25. reenvío rápido de una canción usando AVAudioPlayer
- 26. diferencia entre el reenvío y la redirección
- 27. Reenvío de puertos (NAT UPNP) ERROR
- 28. Reenvío perfecto: ¿de qué se trata?
- 29. ssh El reenvío de X11 no funcionará
- 30. Objeto orientado C++ win32?
¿No es suficiente '#define HANDLE int'? – ruslik
@ruslik: HANDLE no es un 'int'. En particular, creo que tiene el mismo ancho que un puntero. –
@Billy en realidad es un índice en algunas tablas en el espacio del kernel. Y de todos modos, no necesita realizar ninguna aritmética en él. – ruslik