2011-04-11 12 views
16

duplicados posibles:
What is a Windows Handle?
What exactly is “handle” ?¿Qué es un "mango"?

veo referencias a la ventana manijas, los controles que tienen una referencia a una ventana mango, etc, pero me Don' Sé lo que es un mango.

Me gustaría saber especialmente de qué se trata, y cualquier detalle relevante, en lo que respecta a .NET.

+0

Este es un duplicado de http://stackoverflow.com/questions/902967/what-is-a-windows-handle, que, a pesar de no tener una respuesta aceptada proporciona la información estas buscando. –

+0

Posible duplicado de: http://stackoverflow.com/questions/902967/what-is-a-windows-handle – ChrisWue

+3

Los identificadores no son algo de .NET. Son cosas de Windows. – BoltClock

Respuesta

9

Un asa es una referencia para el sistema operativo. No tiene la semántica de una referencia de programación, pero lo que sí hace es permitir que los recursos del sistema sepan a qué se refiere cuando se pasa en una llamada API.

Por lo general, el MANGO se envuelve en una instancia de una clase. CWnd es un buen ejemplo, contiene un HWND que maneja una ventana.

Puede hacerlo. CWnd * pWnd = CWnd :: FromHandle (hWnd) Nota: CWnd :: FromHandle (hWnd) es estático y no requiere una instancia.

Te devolverá la envoltura que envuelve al hWnd. Bueno, no del todo! Si el mango no está realmente envuelto por un objeto, lo creará Y SÓLO SERÁ TEMPORAL. Así que úsala una vez y luego tírala. Puede crear la instancia porque el hWnd tiene suficiente información en su estructura para que Windows cree una instancia de un objeto CWnd. No lo agrega a la tabla de objetos handle v, por lo que solo es temporal.

El HWND es, de hecho, un objeto kernel y hay más?HWND (clases derivadas de CWnd y CWnd) HDC (clases derivadas de CDC y CDC) HMENU (CMenu) HPEN (CGdiObject) HBRUSH (CGdiObject) HFONT (CGdiObject) HBITMAP (CGdiObject) HPALETTE (CGdiObject) HRGN (CGdiObject) HIMAGELIST (CImageList) SOCKET (CSocket) (¿Debería haber sido HSOCKET?) + Otros. No estoy seguro de si todos estos devolverían un objeto temporal si es necesario. GetDC (hWnd) obtendrá un hDC de un hWnd pero será temporal, probablemente sea mejor usar el CDC claa.

Leer más: http://wiki.answers.com/Q/What_is_a_handle_in_Windows_Programming#ixzz1JBmoF0lv

1

Handle es algo que identifica de manera única el objeto OS, ya sea un socket, una primitiva de sincronización, etc. (en Unix se les suele llamar descriptores). Técnicamente es una compensación en la tabla de objetos global o un puntero para registrar que contiene información del objeto. Pero debe tratar este identificador como un número opaco.

.NET utiliza referencias a objetos, por lo que en .NET se encuentra con identificadores cuando se trata de la interoperación con el sistema operativo.

5

Un identificador es una referencia abstracta a algún recurso proporcionado por otra parte (generalmente el sistema operativo), que puede devolver para referenciar ese recurso.

Los sistemas operativos a menudo contienen una tabla de control que contiene las entidades que los usuarios han creado (archivos abiertos, ...); el identificador es un índice entero en esta tabla. Su proceso se abre, el sistema operativo crea una entrada en su tabla de control, la marca con su nombre (proceso) y le devuelve el índice de esa entrada a su proceso. Cuando su proceso quiere hacer una lectura, proporciona el entero de manejo al sistema operativo, que lo busca en la tabla simplemente utilizándolo como índice de tabla; ahora sabe de qué entidad (archivo) quiere leer su proceso.

Al colocar su identificación de proceso en la entrada del identificador, el sistema operativo puede determinar si el identificador es válido para el proceso. Su proceso puede proporcionar basura como un control para el sistema operativo; si la ranura del mango coincide, el sistema operativo hará lo que usted desee, independientemente de cuán estúpido sea. Después de todo, es su recurso.