remarks para cref c# .net winapi c++-cli window-handles

para - remarks c#



¿Por qué usar IntPtr para manejarlo? (4)

Cuando uso PInvoke, noté que necesitamos usar IntPtr para referirnos a los identificadores de Windows. Me pregunto por qué no solo uso int para el mango? Mi comprensión de un manejador es que es solo un valor entero.


El tamaño de un mango depende de la arquitectura de la máquina (32/64 bit). IntPtr se encargará de eso.


Los identificadores son valores de tamaño de puntero .

Tienen 8 bytes de ancho en plataformas de 64 bits.


Un identificador de Windows se define como un entero del tamaño del puntero de la máquina nativa . Eso es para que puedan ser un puntero en secreto si es necesario. (Un identificador probablemente no es un puntero , pero se permite que sea uno si los implementadores del sistema operativo lo consideran necesario. Por lo general, no son punteros por razones de seguridad; hace que sea demasiado fácil para las personas abusar del sistema si son realmente punteros.)

Un int en C # definido como un entero de 32 bits, que será demasiado pequeño en una máquina de 64 bits. Un IntPtr se define como un entero que puede contener un puntero del tamaño de la máquina. Es por eso que siempre usa IntPtr cuando interopera con manejadores.


Un identificador es esencialmente un puntero de nivel de sistema y un puntero no se convierte implícitamente en un int. Es un tipo en sí mismo. Es por eso que tiene IntPtr en .NET para representar el tipo de Handle.