¿'Handle' es sinónimo de puntero en WinAPI? - ventanas, winapi, manejar

I"ve been reading some books on windows programación en C ++ últimamente, y he tenido una comprensión confusa de algunos de los conceptos recurrentes en WinAPI. Por ejemplo, hay muchos tipos de datos que comienzan con la palabra clave "H", ¿se supone que deben usarse como punteros? Pero luego hay otros tipos de datos que comienzan con la palabra clave del puntero "P". Entonces supongo que no. Entonces, ¿qué es exactamente? ¿Y por qué los punteros a algunos tipos de datos dieron tipos de datos separados en primer lugar? Por ejemplo, PCHAR podría haberse diseñado fácilmente para ser CHAR *?

Respuestas

7 para la respuesta № 1

Handles used to be pointers in early versions of Windows pero ya no lo son Piense en ellos como una "cookie", un valor único que permite a Windows encontrar un recurso que se asignó anteriormente. Al igual que CreateFile () devuelve un nuevo identificador, más adelante lo utiliza en SetFilePointer () y ReadFile () para leer datos del mismo archivo. Y CloseHandle () para limpiar la estructura interna de datos, cerrando el archivo también. Que es el patrón general, una función api para crear el recurso, uno o más para usarlo y otro para destruirlo.

Sí, los tipos que comienzan con P son punterotipos. Y sí, son superfluas, funciona igual de bien si usa el * usted mismo. No estoy seguro de por qué los programadores de C les gusta declararlos, personalmente creo que reduce la legibilidad del código y siempre los evito. Pero tenga en cuenta los tipos de compuestos, como LPCWSTR, un "puntero largo a una cadena ancha constante". L ya no significa nada, que se remonta a la versión de Windows de 16 bits. Pero puntero, const y wide son importantes. hacer use ese typedef, no hacerlo arriesgará futuros problemas de portabilidad. Cuál es la razón principal por la que existen estos typedefs.


2 para la respuesta № 2

Un manejador es lo mismo que un puntero solo hasta dondeambos identifican un artículo en particular. Obviamente, un puntero es la dirección del elemento, por lo que si conoce su estructura, puede comenzar a obtener campos en el elemento. Un identificador puede ser o no un puntero, básicamente, si es un puntero, no sabe qué es. señalando para que no pueda entrar a los campos.

La mejor manera de pensar en un mango es que es unidentificación única para algo en el sistema. Cuando lo pasa a algo en el sistema, el sistema sabrá a qué lanzarlo (si es un puntero) o cómo tratarlo (si es solo una identificación o índice).


Menú