La función WinAPI OpenFile devuelve HFILE, y GetFileTime, por ejemplo, necesita HANDLE. Cuando lo alimento con (HANDLE) some_hFile parece funcionar bien. ¿Hay alguna diferencia en este tipo, o uno de estos es simplemente rudimentario?¿Cuál es la diferencia entre HANDLE y HFILE en WinAPI?
Respuesta
OpenFile es una función de compatibilidad hacia atrás de Windows de 16 bits. CreateFile es la función para abrir archivos.
Si la función tiene éxito, HFILE es un archivo HANDLE. Si no, entonces es una constante HFILE_ERROR (presumiblemente -1). El punto es que no puede ser una MANIJA en caso de error, por lo que devuelven algo que puede ser una MANIJA o un valor de error.
Consulte la sugerencia de @Barry también.
El archivo OpenFile devuelve un identificador de archivo en caso de éxito o un HFILE_ERROR si falla.
Para responder a su pregunta, HANDLE es simplemente un número de 32 bits sin signo definido como PVOID. Es un mango genérico. HFILE es un identificador especializado, aunque se define como un número de 32 bits firmado para poder obtener el valor -1.
Hay otros identificadores especializados, como HACCEL, HBITMAP, HINSTANCE, etc., todos definidos como una dependencia de HANDLE.
Hace años, HANDLES
eran de 16 bits int
s. Todos los identificadores en todas partes en Windows fueron HANDLES
. Entonces alguien se dio cuenta de que un archivo HANDLE
no era exactamente lo mismo que una ventana HANDLE
, y si se definían de manera diferente, por ejemplo como HFILE
y HWND
, entonces tal vez los desarrolladores no los intercambiarían accidentalmente. (Sin embargo, ambos fueron typedef
'ed a int
).
Más tarde, alguien se dio cuenta de que si se definieron por completo defferently ... decir que:
typedef struct _hfile {} * HFILE;
typedef struct _hwnd {} * HWND;
entonces el propio compilador se quejaban si utilizó uno en lugar del otro, aunque, en realidad, , cada uno era simplemente un viejo valor de 16 bits (eventualmente 32 bits) int
.
- 1. ¿Cuál es la diferencia entre GetClientRect y GetWindowRect en WinApi?
- 2. ¿Cuál es la diferencia entre + = y = +?
- 3. ¿cuál es la diferencia entre:.! y: r !?
- 4. ¿Cuál es la diferencia entre ".equals" y "=="?
- 5. Cuál es la diferencia entre $ y jQuery
- 6. Cuál es la diferencia entre = y: =
- 7. Cuál es la diferencia entre $ (...) y `...`
- 8. ¿Cuál es la diferencia entre dict() y {}?
- 9. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 10. ¿Cuál es la diferencia entre {0} y ""?
- 11. ¿Cuál es la diferencia entre .ToString (+) y ""
- 12. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 13. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 14. ¿Cuál es la diferencia entre " " y ""?
- 15. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 16. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 17. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 18. ¿Cuál es la diferencia entre Session.Abandon() y Session.Clear() en ASP.Net?
- 19. ¿cuál es la diferencia entre didselectrowindexpath y willselectrowindexpath en iphone?
- 20. ¿cuál es la diferencia entre NULL y Empty en mysql
- 21. ¿Cuál es la diferencia entre longblob y longtext en mysql?
- 22. ¿Cuál es la diferencia entre $ @ y $ * en scripts de shell?
- 23. ¿Cuál es la diferencia entre flush y commit en Hibernate?
- 24. ¿Cuál es la diferencia entre iTerm2 y Terminal en Mac?
- 25. ¿Cuál es la diferencia entre @ y @@ en un módulo?
- 26. ¿Cuál es la diferencia entre & y && en MATLAB?
- 27. ¿Cuál es la diferencia entre _isEnabled y isEnabled en Anguila?
- 28. ¿Cuál es la diferencia entre referencias y objetos en Java?
- 29. cuál es la diferencia entre mapa y hashmap en STL
- 30. ¿cuál es la diferencia entre r y rb en fopen