Diferencia entre revisiones de «DLL Win32»

(Página creada con '= Escribiendo una DLL Win32 = <br> == Introducción == Este articulo explica los fundamentos de la escritura de un archivo DLL de Windows de 32 bits. Voy a dirigir a los p...')
(Sin diferencias)

Revisión del 10:50 25 mar 2011

Escribiendo una DLL Win32


Introducción

Este articulo explica los fundamentos de la escritura de un archivo DLL de Windows de 32 bits. Voy a dirigir a los programadores de Visual Basic que han decidido que es necesario escribir un archivo DLL para sus aplicaciones Visual Basic. Sin embargo, los programadores de VB no son los únicos usuarios de archivos DLL. Los programadores que quieran escribir un archivo DLL para interactuar con otros idiomas también encontrará útil este articulo.

Además, este articulo es específico para escribir un archivo DLL en C.

¿Qué es una biblioteca de vínculos dinámicos

¿Qué necesito para escribir un archivo DLL?

¿Qué puedo hacer en un archivo DLL?

¿Dónde puedo conseguir fuente de ejemplo DLL?

¿Dónde puedo obtener más información sobre cómo escribir un archivo DLL?


¿Qué es una biblioteca de vínculos dinámicos?

Una biblioteca de vínculos dinámicos, DLL, es una biblioteca de funciones que se puede llamar por una aplicación en tiempo de ejecución. La aplicación y funciones dentro de la DLL no están obligados hasta el programa de aplicación se ejecuta. En el entorno WIN32 DLL están siendo utilizados para propósitos más a continuación, en el entorno de 16 bits. servidores OLE, los filtros ISAPI, e incluso algunos programas CGI se implementan como DLL. Sólo me ocuparé de la DLL de base en este articulo. Normalmente las funciones en un archivo DLL son para un fin determinado (acceso a internet, gráfica, la comunicación del puerto serie). También puede ser una colección de funciones requeridas por una aplicación y sólo específicamente a la citada solicitud. Esta es la única convención, si usted está escribiendo un archivo DLL que se puede poner lo que quieras en funciones de la misma.

Si usted va a escribir y distribuir un archivo DLL, no es necesario registrar su nombre ni obtener una ID de nadie. Usted puede nombrar como quieras, pero por favor, intente lo hacen único. Si se llama a la DLL "KERNEL.DLL" tendrá problemas con él (KERNEL es un Microsoft Windows DLL utilizado para realizar operativos kernelfunctions sistema).

Una aplicación puede enlazar a un archivo DLL en dos formas:

Tiempo de carga de Enlace

El enlace de llamadas

Tiempo de carga de enlace de carga el archivo DLL cuando una aplicación que usa se carga para su ejecución. Windows carga el archivo DLL de la aplicación. El enlace con la llamada, el archivo DLL se carga cuando es necesario. Si nunca se necesita la aplicación nunca será cargado. Carga Visual Basic DLL cuando el formulario que contiene la instrucción Declare se carga. Si una aplicación VB lugares la función DLL declarar en un módulo o en un formulario que se carga cuando se carga la aplicación, a continuación, el archivo DLL será atado en el momento de aplicación de la carga. Si declaran se coloca en un formulario que se carga dinámicamente por la aplicación Visual Basic, a continuación, el archivo DLL se carga cuando se carga el formulario.

Una última nota sobre la carga del archivo DLL, Windows localizar un archivo DLL en el siguiente orden:

En la memoria, un archivo DLL, una vez cargado, es global para todos los de Windows hasta que se descarga.

En el directorio donde se cargó la aplicación

En el directorio de Windows

En el directorio windows \ system

En los directorios especificados en el PATH DOS


¿Qué necesito para escribir un archivo DLL?

A partir de hoy, la mayoría de DLL están escritas en C. También es posible escribir un archivo DLL en Pascal / Delphi, lenguaje ensamblador o BASIC. (Visual Basic no se puede utilizar para escribir una DLL de verdad. La DLL de la VB crea son contenedores OLE que tienen una extensión .DLL Ellos no son del archivo DLL como se describe en este articulo.) Para escribir un archivo DLL de 32 bits se necesita un compilador capaz de crear DLL de Windows de 32 bits. Los dos compiladores de C más populares que pueden hacer esto son:

Microsoft Visual C + + Versión 4.0 + Borland C + + para Windows Versión 5.0 +

Si usted no tiene un compilador, se necesita uno para escribir una DLL. Además del compilador, se necesitan conocimientos de C y la API de Win32. NOTA: C es el lenguaje que se utiliza para escribir un archivo DLL, no en C + +. C + + es una extensión orientada a objetos de C. Si usted tiene un compilador C + +, C puede manejar muy bien. También puede escribir no exportedfunctions como objetos C + +, pero las funciones que están llamados a las aplicaciones de Windows deben ser las funciones de C, no C + + funciones o métodos.


Requisitos DLL

Un archivo DLL de Windows de 32 bits no requiere ninguna función especial. Si desea inicializar el archivo DLL cuando se carga, puede tener una función denominada DllMain y su inicialización, pero no es necesario. Windows llama a la función DllMain de un archivo DLL en cuatro casos:

Cuando un proceso se concede la DLL Cuando un hilo concede la DLL Cuando un proceso se separa el archivo DLL Cuando un thrad separa el archivo DLL Una función básica DllMain podría tener el siguiente aspecto:

BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD fwdReason, LPVOID lpvReserved) {

switch(fwdReason) 
{ 
 case DLL_PROCESS_ATTACH: 
  break; 
 case DLL_THREAD_ATTACH: 
  break; 
 case DLL_PROCESS_DETACH: 
  break; 
 case DLL_THREAD_DETACH: 
  break; 
} 
return(TRUE);    // The initialization was successful, a FALSE will abort 
       // the DLL attach 

}

No voy a hablar más de esto que ninguna, ya que no está obligado a escribir una DLL sencilla. Si usted necesita para llevar a cabo una initializaton DLL, consulte la Referencia de la API de Win32 para obtener más detalles. El único requisito otras de las funciones en un archivo DLL es que las funciones que se puede llamar desde fuera de la DLL, debe ser declarada "WINAPI". Si no los declaran esta manera, usted no será capaz de llamada.

Usted también necesitará un archivo DEF especial para un archivo DLL. A continuación se presenta una muestra DEF.

LIBRARY &el nombre de tu DLL va aqui>

EXPORTS &el nombre de una funcion exportada>

           &el nombre de otra funcion exportada>

Eso es todo. Después de compilación y enlace, puede comenzar a probar el archivo DLL.


¿Qué puedo hacer en un archivo DLL?

Mucha gente se pregunta lo que es permisible en un archivo DLL. Bueno, casi todo está permitido. Cuando una aplicación llama a una función DLL, el DLL se ejecuta como una extensión del proceso de la aplicación. En realidad, es cargado en las solicitudes de espacio de memoria local. Cualquier archivo que se abre se abre el proceso, cualquier memoria asignada se asigna a montones local o global del proceso. Hemos de tener esto en cuenta y se le multa.

Algunas de las cosas que usted puede ser que desee hacer en un archivo DLL son:

Realiza la función GDI llama a pintar la pantalla.

Asignar memoria global de Windows Realizar / S de archivos

De búsqueda de Windows tablas internas

Realizar que el puerto de E / S

Otra llamada de API

Todas estas cosas son posibles, lo más importante a recordar es escribir el archivo DLL lo más limpio posible. Si asigna un recurso, y no es necesario para evitar que, sin que antes de regresar de su función de DLL. Recuerde siempre, una DLL puede causar todo tipo de problemas en Windows y no puede mostrar hasta que el archivo DLL ha sido descargado.

También es necesario tener en cuenta que las variables externas WIN32 DLL son externos sólo a la instancia de la DLL. Si dos procesos utilizan la misma DLL, que cada uno recibe una copia privada de las variables externas. Menciono esto porque esto es una diferencia importante entre los de 32 bits y 16 bits DLL. Usted no puede utilizar las variables externas DLL para compartir información entre los procesos. Debe utilizar la API de Win32 para compartir objetos de memoria.

También quiero advertir sobre una inconsistencia entre Visual Basic y C. En C, un tipo int es de 32-bits de longitud. Esto es compatible con Win32. En VB, y entero es de 16-bits de longitud. Si utiliza un argumento int en el archivo DLL, debe declarar el parámetro como Long en VB.


¿Dónde puedo conseguir fuente de ejemplo DLL?

Puedes encontrar el código fuente de DLL en casi cualquier sitio FTP de Internet que tratan con la programación de Windows, así como otros foros en línea de servicios. El problema con la mayoría de esta fuente es que la DLL se escribió con un propósito. Usted tiene que recorrer cientos de líneas de código sólo para tener una idea de lo que usted necesita para un archivo DLL simple.


¿Dónde puedo obtener más información sobre cómo escribir un archivo DLL?

La mayoría de buenos libros de programación en C para Windows incluirá un capítulo o dos en la escritura de un archivo DLL.

Desde que escribí un archivo DLL es simplemente escribir un programa de Windows, tendrá acceso a la documentación de la API de Windows. Usted también querrá informacion en la escritura de programas que utilizan GDI, núcleo y otra parte de Windows.


Fuente

Writting a Win32 DLL Win32DLLs

Enlaces Internos

Ciencia de la Información

Enlaces Externos

[1] [2]