¿Qué significa manejar? ¿Existe en C#? ¿Cómo encuentra csdn el identificador?
*.Módulos
*.Tareas
*.Archivos
*.Bloques de memoria
*.Menú
*.Control
*.Font
*.Objetos GDI (recursos), incluidos iconos, cursores), cadena (cadena)
*.
Los programas WINDOWS no utilizan direcciones físicas para identificar bloques de memoria, archivos, tareas o módulos cargados dinámicamente, en cambio, la API de WINDOWS sí lo hace. Estos elementos asignan identificadores determinados y devuelven los identificadores a la aplicación; , que luego opera sobre ellos.
En el libro "WINDOWS Programming Short Ping Kuai" (Nanjing University Press), se dice que: Los identificadores son los únicos objetos utilizados por WINDOWS para identificar los objetos que se han creado o utilizado en la aplicación. , varios identificadores de identificadores utilizados por WINDOWS, como instancias de aplicaciones, ventanas, controles, mapas de bits, objetos GDI, etc. Los identificadores de WINDOWS son algo así como los identificadores de archivos C.
De las dos definiciones anteriores, podemos ver que un identificador es un identificador que se utiliza para identificar un objeto o proyecto. Es como si cada uno tuviera un nombre y los nombres de diferentes personas fueran diferentes. Lo mismo, pero tal vez con un nombre, tengas la misma persona. En lo que respecta a los tipos de datos, es sólo un entero sin signo de 16 bits. Las aplicaciones casi siempre obtienen un identificador llamando a una función de WINDOWS, que luego pueden usar otras funciones de WINDOWS para hacer referencia al objeto correspondiente. En la programación de WINDOWS se utiliza una gran cantidad de identificadores, como HINSTANCE (identificador de instancia), HBITMAP (identificador de mapa de bits), HDC (identificador de tabla de descripción de dispositivos), HICON (identificador de iconos), etc. También hay un identificador de uso común, que es HANDLE Por ejemplo, la siguiente declaración:
HINSTANCE hInstance;
se puede cambiar a:
HANDLE hInstance;
Ambos. de las dos afirmaciones anteriores son correctas.
Las aplicaciones WINDOWS pueden obtener un identificador de un proyecto específico de diferentes maneras. Muchas funciones API, como CreateWindow, GlobalAlloc y OpenFile, devuelven un valor de identificador. Además, WINDOWS también puede proporcionar un identificador como parámetro a la aplicación a través de la función de exportación de la aplicación. Una vez que la aplicación determina un elemento de identificador, puede operar en este identificador en cualquier lugar del entorno WINDOWS. De hecho, el uso generalizado de identificadores ha influido en el diseño de todos los programas de WINDOWS.
Un identificador sólo comienza a tener significado cuando identifica de forma única un elemento.
Por ejemplo, un identificador corresponde a un elemento en una tabla de elementos, y solo WINDOWS puede acceder directamente a esta tabla de elementos. ¡Las aplicaciones solo pueden manejar diferentes identificadores a través de funciones API! Por ejemplo: podemos solicitar una porción de memoria para la aplicación llamando a la función API GlobalAlloc y devolver un valor de identificador:
hMem=GlobalAlloc(...)
Ahora hMem's El valor es solo un valor de índice, no una dirección física, y las aplicaciones no pueden acceder a la memoria directamente. Hay otro tema aquí, es decir, en circunstancias normales, cuando estamos programando, la memoria asignada a la aplicación se puede mover o descartar, para que podamos aprovechar al máximo los recursos de memoria limitados, por lo tanto, en un momento determinado. Al mismo tiempo, asignamos La dirección del bloque de memoria es incierta porque se puede mover, por lo que debe bloquear el bloque de memoria. Aquí la aplicación debe llamar a la función API GlobalLock para bloquear el identificador.
lpMem=GlobalLock(hMem);
De esta manera la aplicación puede acceder a la memoria.
Nota:
El identificador del objeto del núcleo es una identificación utilizada para identificar un objeto del núcleo
Esta identificación es diferente para cada proceso. La implementación específica es un milisegundo. Algoritmo no revelado de nivel El siguiente es un algoritmo aproximado y posible:
Después de crear el proceso, el sistema Windows creará una tabla de identificadores para el proceso
Cuando el proceso Cuando usted. desea obtener el identificador de un objeto del kernel o crear un objeto del kernel para obtener el identificador del objeto
El sistema agregará una entrada a la tabla de identificadores.
Al mismo tiempo , el sistema volverá a la tabla de identificadores. El índice de esta entrada de la tabla sirve como identificador
De esta manera, el proceso puede acceder al objeto consultando la tabla de identificadores por el identificador, obteniendo así el objeto. puntero.
Al mismo tiempo, gracias a la protección de la tabla de identificadores, se pueden evitar operaciones ilegales en objetos del kernel.
Creo que ahora entiendes el concepto de manijas y espero que mi artículo te sea útil. De hecho, si ha estudiado programación SDK, comprenderá mejor y más profundamente el concepto de manejo. Si está aprendiendo a programar MFC directamente desde VC6, se recomienda que eche un vistazo a la programación SDK, que lo beneficiará mucho.