Diferencia entre revisiones de «DLL Win32»

Línea 1: Línea 1:
= Escribiendo una DLL Win32 =
+
'''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 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.
+
== Biblioteca de vínculos dinámicos  ==
  
Además, este articulo es específico para escribir un archivo DLL en C. <br>
+
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.  
  
¿Qué es una biblioteca de vínculos dinámicos <br>
+
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.  
 
 
¿Qué necesito para escribir un archivo DLL? <br>
 
 
 
¿Qué puedo hacer en un archivo DLL? <br>
 
 
 
¿Dónde puedo conseguir fuente de ejemplo DLL? <br>
 
 
 
¿Dónde puedo obtener más información sobre cómo escribir un archivo DLL?
 
 
 
<br>
 
 
 
== ¿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).  
 
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).  
Línea 29: Línea 13:
 
Una aplicación puede enlazar a un archivo DLL en dos formas:  
 
Una aplicación puede enlazar a un archivo DLL en dos formas:  
  
Tiempo de carga de Enlace <br>
+
*Tiempo de carga de Enlace
 +
 
 +
*El enlace de llamadas
  
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.
  
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.  
+
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:  
 
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. <br>
+
En la memoria, un archivo DLL, una vez cargado, es global para todos los de Windows hasta que se descarga. <br>  
  
En el directorio donde se cargó la aplicación<br>
+
*En el directorio donde se cargó la aplicación<br>
  
En el directorio de Windows <br>
+
*En el directorio de Windows <br>
  
En el directorio windows \ system <br>
+
*En el directorio windows \ system
  
En los directorios especificados en el PATH DOS  
+
*En los directorios especificados en el PATH DOS
  
<br>
+
== Para escribir un archivo DLL  ==
  
== ¿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 .
  
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:  
+
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 +  
 
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.  
 
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.  
 
<br>
 
  
 
== Requisitos DLL  ==
 
== Requisitos DLL  ==
Línea 65: Línea 49:
 
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:  
 
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)  
+
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 }
  
switch(fwdReason)
+
Si necesita para llevar a cabo una initializaton DLL, consulte la Referencia de la API de Win32 para obtener más detalles.
{
 
  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.  
+
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.  
 
Usted también necesitará un archivo DEF especial para un archivo DLL. A continuación se presenta una muestra DEF.  
Línea 91: Línea 63:
 
EXPORTS &amp;el nombre de una funcion exportada&gt;  
 
EXPORTS &amp;el nombre de una funcion exportada&gt;  
  
            &amp;el nombre de otra funcion exportada&gt;
+
el nombre de otra funcion exportada  
  
 
Eso es todo. Después de compilación y enlace, puede comenzar a probar el archivo DLL.  
 
Eso es todo. Después de compilación y enlace, puede comenzar a probar el archivo DLL.  
  
<br>
+
== Para hacer en un archivo DLL  ==
  
== ¿Qué puedo hacer en un archivo DLL?  ==
+
Casi todo está permitido en un archivo DLL. 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.  
 
 
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:  
 
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.  
+
*Realiza la función GDI llama a pintar la pantalla.
  
Asignar memoria global de Windows Realizar / S de archivos  
+
*Asignar memoria global de Windows Realizar / S de archivos
  
De búsqueda de Windows tablas internas  
+
*De búsqueda de Windows tablas internas
  
Realizar que el puerto de E / S  
+
*Realizar que el puerto de E / S
  
Otra llamada de API  
+
*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.  
 
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.  
Línea 119: Línea 89:
 
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.  
 
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.  
  
<br>
+
== Fuente de ejemplo DLL  ==
  
== ¿Dónde puedo conseguir fuente de ejemplo DLL?  ==
+
El código fuente de DLL puede encontrarse 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.
  
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.
+
== Para obtener más información sobre cómo escribir un archivo  ==
 
 
<br>
 
 
 
== ¿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.  
 
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.  
 
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.  
 
<br>
 
  
 
== Fuente  ==
 
== Fuente  ==
  
Writting a Win32 DLL [http://www.rohitab.com Win32DLLs] <br>
+
*[http://www.rohitab.com Win32DLLs]
  
== Enlaces Internos ==
+
== Enlace Interno ==
  
[[Ciencia de la Información]] <br>
+
*[[Ciencia de la Información]]
  
== Enlaces Externos ==
+
== Enlace Externo ==
  
[http://logix4u.net/Programming/vc++/A_Tutorial_on_creating_DLLs_with_VC++.html] [http://msdn.microsoft.com/en-us/library]  
+
*&nbsp;[http://msdn.microsoft.com/en-us/library microsoft.com]
  
 
[[Category:Informática]]
 
[[Category:Informática]]

Revisión del 15:54 4 abr 2011

DLL Win32.


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.

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

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 }

Si 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.

Para hacer en un archivo DLL

Casi todo está permitido en un archivo DLL. 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.

Fuente de ejemplo DLL

El código fuente de DLL puede encontrarse 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.

Para obtener más información sobre cómo escribir un archivo

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

Enlace Interno

Enlace Externo