Creación de DLL en Delphi. Creación y uso de bibliotecas dinámicas (DLL) en Delphi. forma. Vincular una DLL a un programa



Introducción

Debido al rápido desarrollo de las tecnologías de programación, cada vez más personas se enfrentan al problema de aumentar las capacidades de sus programas. Este artículo está dedicado precisamente a este tema, es decir, la programación de DLL en Borland Delphi. Además, ya que tocaremos cuestiones sobre el uso. DLL, luego, al mismo tiempo, abordaremos la importación de funciones desde archivos DLL externos (incluidos los del sistema, es decir, WinAPI).

Áreas de aplicación de DLL

Entonces, ¿por qué se necesitan las DLL y dónde se utilizan?... Enumeremos solo algunas de las áreas de su aplicación:

Bibliotecas separadas Contienen funciones adicionales útiles para programadores. Por ejemplo, funciones para trabajar con cadenas o bibliotecas complejas para convertir imágenes. Las DLL de almacenamiento de recursos pueden almacenar no sólo programas y funciones, sino también todo tipo de recursos: iconos, imágenes, matrices de cadenas, menús, etc. Bibliotecas de soporte Los ejemplos incluyen bibliotecas de paquetes tan conocidos como: DirectX, ICQAPI (API para ICQ), OpenGL, etc.

Partes de un programa Por ejemplo, ventanas de programas (formularios), etc. se pueden almacenar en una DLL.

Complementos Aquí es donde

espacio real

¡Para los pensamientos de un programador! Los complementos son adiciones a un programa que amplían sus capacidades. Por ejemplo, en este artículo veremos la teoría de cómo crear un complemento para su propio programa. Una DLL (biblioteca de enlaces dinámicos) de recursos compartidos puede ser utilizada por varios programas o procesos a la vez (el llamado recurso compartido) Breve descripción de funciones y técnicas para trabajar con DLL.


NombreFunción (o NombreProcedimiento) el nombre de la función (o procedimiento) que se utilizará en su programa; Par1, Par2, ... nombres de parámetros de función o procedimiento; Par1Type, Par2Type, ... tipos de parámetros de función o procedimiento (por ejemplo, Integer); Tipo de retorno ReturnType (solo función); directiva stdcall, que debe coincidir exactamente con la utilizada en la propia DLL;

directiva externa "DLLNAME.DLL" que especifica el nombre de la DLL externa desde la cual se importará

esta función

o procedimiento (en este caso - DLLNAME.DLL);

nombre Directiva "FunctionName" ("ProcedureName") que especifica el nombre exacto de la función en la propia DLL. Esta es una directiva opcional que permite utilizar una función en un programa que tiene un nombre distinto al verdadero (que tiene en la biblioteca);

directiva index FunctionIndex(ProcedureIndex) que especifica


número de serie


funciones o procedimientos en una DLL. Esta es también una directiva opcional.

Este es un método mucho más complejo, pero también más elegante. No tiene la desventaja del primer método. Lo único desagradable es la cantidad de código necesario para implementar esta técnica, y la dificultad es que se puede acceder a la función importada desde la DLL solo cuando esta DLL está cargada y en la memoria... Puedes ver el ejemplo a continuación, pero por ahora - una breve descripción de las funciones WinAPI utilizadas por este método: LoadLibrary(LibFileName: PChar) Carga la biblioteca especificada LibFileName en la memoria. En caso de éxito, la función devuelve un identificador (THandle) a la DLL en la memoria. GetProcAddress(Module: THandle; ProcName: PChar) lee la dirección de la función de biblioteca exportada. En caso de éxito, la función devuelve un identificador (TFarProc) a la función en la DLL cargada. función de cadena StrPas.

Bueno, ahora veamos la DLL en sí:

Ejemplo 3. Fuente del proyecto MYDLL.DPR


Colocar recursos y formularios en DLL

Una DLL puede contener no sólo funciones, sino también cursores, imágenes, iconos, menús, cadenas de texto. No nos detendremos en esto. Solo señalaré que para cargar un recurso es necesario cargar la DLL y luego, habiendo recibido su descriptor, cargar el recurso con la función adecuada (LoadIcon, LoadCursor, etc.). En esta sección, sólo tocaremos brevemente la ubicación de las ventanas de aplicaciones (es decir, formularios en Delphi) en las DLL.

Para hacer esto, necesita crear una nueva DLL y agregarle nuevo uniforme(Archivo -> Nuevo -> DLL y luego Archivo -> Nuevo formulario). A continuación, si el formulario es un cuadro de diálogo ( forma modal(bsDialog)), luego agréguelo a la DLL siguiente función(digamos que el formulario se llama Form1 y su clase es TForm1):

Ejemplo 4: colocar un formulario en una DLL


Si necesita colocar un formulario no modal en una DLL, debe crear dos funciones: abrir y cerrar el formulario. En este caso, debe forzar a la DLL a recordar el identificador de este formulario.

Creando complementos

Aquí no consideraremos los complementos en detalle, porque... Los ejemplos ya proporcionados anteriormente le ayudarán a comprender fácilmente la parte más importante de la programación de DLL. Permítanme recordarles que un complemento es una adición al programa que amplía sus capacidades. Al mismo tiempo, el programa en sí debe prever la presencia de dichos complementos y permitirles cumplir su propósito.

Es decir, por ejemplo, para crear un complemento para editor gráfico que realizaría la conversión de imágenes, debe proporcionar al menos dos funciones en el complemento (y, en consecuencia, llamar a estas funciones en el programa): una función que devolvería el nombre del complemento (y/o su tipo) para poder agregue este complemento al menú (o en la barra de herramientas), además función principal- transmisión y recepción de imágenes. Aquellos. Primero, el programa busca complementos, luego, para cada uno encontrado, llama a su función de identificación con un nombre estrictamente definido (por ejemplo, GetPluginName) y agrega artículo deseado en el menú, luego, si el usuario ha seleccionado este elemento, llama a una segunda función, a la que pasa la imagen de entrada (o el nombre del archivo que contiene esta imagen), y esta función, a su vez, procesa la imagen y lo devuelve en una nueva forma (o el nombre del archivo con la nueva imagen). Esa es la esencia del complemento... :-)

Epílogo

Este artículo muestra los conceptos básicos del uso y creación de DLL en Borland Delphi. Si tienes preguntas, envíamelas por correo electrónico:

El entorno de programación Delphi proporciona herramientas integradas para crear rápidamente archivos DLL.

Creemos una biblioteca que contenga la función que será específica.

ObtenerArea(a, b, c: REAL):REAL.

Esta función toma como entrada las longitudes de los lados del triángulo. La función devuelve el área del triángulo dado:

p:=(a+b+c)/2;

Resultado:=SQRT(p*(p-a)*(p-b)*(p-c))

Lanzamiento Delfi, y luego actuamos de manera poco convencional. Seleccionar elementos del menú Filenorteufffohallí, en la ventana que se abre en la pestaña Nufffhaga clic en el icono DLL Wlagartija. ( el algoritmo depende de la versión)

Esto crea un archivo DLL de plantilla. Es muy similar a un módulo normal (unidad) Delfi, simplemente comienza con el operadorBiblioteca. Guarde el proyecto con el nombre que se le dará a la DLL en el futuro, por ejemplo:ObtenerA. NombreObtener áreano se puede utilizar: ya está ocupado por el nombre de la función.

Ahora después del operadorUSOSescribimos el texto de nuestra función, pero con algunos cambios en el título:

FUNCIÓN GetArea(a, b, c:REAL):REAL;exportar;

La palabra clave EXPORTAR indica que la función es exportable y será visible desde programas externos.

Después del texto de la función agregaremos

Obtener área;

La declaración EXPORTS enumera todos los procedimientos y funciones exportados desde la biblioteca. Esta es una especie de catálogo de nuestra biblioteca.

Es imposible ejecutar la biblioteca; sólo se puede compilar. Para hacer esto, seleccione el elemento del menú Proyecto → Construir. Si todo se hizo correctamente, se creará un archivo llamado geta.dll en el disco en el directorio actual. Esta es nuestra biblioteca.

Nota importante: existe una cierta sutileza al pasar parámetros de tipo STRING a procedimientos y funciones ubicados en la biblioteca.

Para poder pasar parámetros del tipo STRING tendrás que especificar la conexión del módulo ShareMem en las sentencias USES tanto de la biblioteca como del programa que lo llama, y ​​aun así que este módulo sea el primero en la lista. . Además, junto con la biblioteca tendrás que incluir el archivo borrandmm.dll (está incluido en la distribución Delphi). Es fácil evitar esta situación: debe usar tipos de datos ShortString para parámetros de tipo de texto (esto es cadena regular, pero con una longitud máxima de 255 caracteres) y PChar (puntero a una cadena de texto).

llamar dll

Hay dos formas de llamar a procedimientos y funciones desde una DLL. En el primer caso, sabemos de antemano, en la etapa de desarrollo del programa, qué DLL nos conectaremos (la mayoría de las veces creamos esta DLL nosotros mismos). En el segundo caso, nos conectamos a una biblioteca arbitraria, incluida una "extranjera".

Enlace estático

Para implementar el primer método, llamado enlace estático, cree una nueva aplicación normal, coloque tres campos de entrada LabeledEdit1...LabeledEdit3, un botón y un componente Tlabel en el formulario. Después de la declaración IMPLEMENTATION, agregue una línea que importe la función GetArea de la biblioteca geta.dll:

Función GetArea(a,b,c:real):REAL; LEJOS; "geta" EXTERNO;

La palabra EXTERNO indica que el cuerpo de esta función se encuentra en la biblioteca con el nombre especificado, y la palabra FAR especifica el uso de direcciones "largas" de cuatro bytes, lo cual es necesario porque programa de llamadas está en una página de la memoria y la DLL está en otra. Por supuesto, el archivo geta.dll debe colocarse en el mismo directorio donde se encuentran todos los archivos de la aplicación actual.

En el controlador de clic del botón, debe crear una matriz, pasarla a la función de biblioteca y mostrar el resultado en la pantalla:

procedimiento TForm1.Button1Click (Remitente: TObject);

Enviar su buen trabajo a la base de conocimientos es fácil. Utilice el siguiente formulario

buen trabajo al sitio">

Los estudiantes, estudiantes de posgrado y jóvenes científicos que utilicen la base de conocimientos en sus estudios y trabajos le estarán muy agradecidos.

Publicado en http://www.allbest.ru/

programa de biblioteca de base de datos delphi

Introducción

1.3 Acceso a datos

2.1 Interfaz del programa

Conclusión

Apéndice A "Listado de programas"

Introducción

Ideas básicas de lo moderno. tecnologías de la información Se basan en el concepto de que los datos deben organizarse en bases de datos para reflejar adecuadamente los cambios. mundo real y satisfacer las necesidades de información de los usuarios. Estas bases de datos se crean y operan bajo el control de autoridades especiales. sistemas de software, llamados sistemas de gestión de bases de datos (DBMS).

Este trabajo de curso está dedicado a simplificar uno de los lados. actividades practicas utilizando bases de datos.

Una base de datos es una colección con nombre de datos estructurados de un área temática.

Considerando la integración tecnología informática V vida diaria, instituciones como las bibliotecas pueden utilizar programas informáticos para almacenar diversos datos (información sobre libros, suscripciones, lectores, etc.).

Objetivo trabajo del curso es crear un programa "Biblioteca" que simplifique el trabajo del personal de la biblioteca, lo que conlleva un ahorro de mucho tiempo.

Los objetivos del trabajo del curso son sistematizar, consolidar y ampliar los conocimientos teóricos y prácticos sobre el uso de ready-made y creación. bases propias datos, utilizando el sistema de programación orientada a objetos Delphi, así como desarrollar habilidades de trabajo independiente.

1. Entorno de desarrollo de software

Para el desarrollo se eligió el lenguaje de programación Delphi. El lenguaje de programación Delphi es una combinación de varias tecnologías importantes:

Compilador de alto rendimiento para código de máquina;

Modelo de componentes orientado a objetos;

Construcción visual (y, por tanto, de alta velocidad) de aplicaciones a partir de prototipos de software;

Herramientas escalables para la construcción de bases de datos.

El compilador integrado en Delphi proporciona rendimiento alto, necesario para crear aplicaciones en una arquitectura cliente-servidor. Ofrece la facilidad de desarrollo y los tiempos de verificación rápidos de un bloque de código terminado típico de los lenguajes de cuarta generación (4GL), al tiempo que mantiene la calidad del código de un compilador 3GL. Además, Delphi proporciona rápido desarrollo sin tener que escribir inserciones en C o codificar manualmente (aunque esto es posible).

Delphi utiliza un lenguaje estructurado orientado a objetos (Object Pascal) que combina el poder expresivo y la facilidad de programación de los lenguajes 4GL con la eficiencia de 3GL. Los programadores pueden comenzar inmediatamente a producir aplicaciones funcionales sin tener que aprender las complejidades de la programación de eventos de Windows. Delphi es totalmente compatible con aplicaciones avanzadas conceptos de software incluyendo encapsulación, herencia, polimorfismo y gestión de eventos.

1.1 Trabajar con bases de datos en Delphi

La tecnología ADO proporciona una forma única para que las aplicaciones accedan a diferentes tipos de fuentes de datos. Según la terminología de ADO, cualquier fuente de datos (base de datos, hoja de cálculo, archivo) se denomina almacén de datos con el que la aplicación interactúa con la ayuda de un proveedor de datos. Conjunto mínimo Los componentes de la aplicación pueden incluir un objeto de conexión, un objeto de conjunto de datos o un objeto de procesador de consultas. La tecnología ADO en su conjunto incluye no solo los objetos en sí, sino también los mecanismos que aseguran la interacción de los objetos con datos y aplicaciones. El mecanismo de acceso a datos de ADO y numerosos objetos e interfaces se implementan en Delphi como un conjunto de componentes ubicados en la página de ADO. Esta arquitectura permite hacer que un conjunto de objetos e interfaces sean abiertos y extensibles.

La pestaña ADO contiene los siguientes componentes:

1. Componentes de conexión:

2. Componentes estándar:

ADODataSet - conjunto de datos universal

ADOTable - tabla de base de datos

ADOQuery - consulta SQL

ADOStoredProc - procedimiento almacenado

En la página de paletas ADO Componentes Delphi Además de los componentes de conexión, existen componentes estándar que denotan un conjunto de datos y están adaptados para funcionar con el almacén de datos ADO.

En la pestaña Conexión (ver Figura 1), debe especificar la ruta a la base de datos o al servidor.

Figura 1 - Ventana de conexión

Componente TADOTable: se utiliza para acceder a los almacenes de datos ADO y presentar información de ellos a forma tabular. El componente proporciona acceso directo a cada registro y sus campos, heredando propiedades y métodos. El componente se comunica con la base de datos a través de las propiedades Connection o ConnectionString.

El nombre de la tabla se especifica en la propiedad TableName. Usando la propiedad Readonly, puede establecer una restricción de solo lectura para esta mesa, prohibiendo así la posibilidad de cambiar los datos. La propiedad MasterSource especifica el componente TDataSource utilizado para crear la relación de integridad referencial.

Componente TDataSource: este componente se vincula a un conjunto de datos. Esta comunicación se realiza a través de la propiedad DataSet, que contiene información sobre el estado actual del conjunto de datos. Este componente tiene un conjunto de propiedades y métodos que facilitan el trabajo con él.

La propiedad AutoEdit coloca automáticamente el conjunto de datos en un estado editable si es Verdadero cuando el elemento de entrada asociado recibe el foco.

El método Editar coloca el conjunto de datos asociado en un estado editable.

El método del controlador OnDataChange se llama cuando se editan datos en el componente visual asociado.

El método del controlador de eventos OnUpdateData se llama antes de que los datos modificados se guarden en el conjunto de datos. Se llama al controlador antes de la ejecución. Método de publicación.

1.2 Componentes de acceso a datos

Los componentes de acceso a datos son componentes no visuales. Las tablas de la base de datos se encuentran en el disco y son objetos físicos. Los conjuntos de datos se utilizan para operar con datos contenidos en tablas. En términos del sistema Delphi, un conjunto de datos es una colección de registros tomados de una o más tablas de bases de datos. Los registros incluidos en el conjunto de datos se seleccionan de acuerdo con ciertas reglas y, en casos particulares, el conjunto de datos puede incluir todos los registros de la tabla asociada a él o no contener ningún registro. El conjunto de datos es tabla lógica, con el que puede trabajar mientras ejecuta la aplicación. La interacción entre una tabla y un conjunto de datos es similar a la interacción entre un archivo físico y una variable de archivo.

En Delphi, los componentes DBTable y ADOTable, ADOQuery, DataAccess, DataControl se utilizan para trabajar con conjuntos de datos.

Las capacidades básicas de acceso a la base de datos las proporciona la clase DataSet, que representa conjuntos de datos como una colección de filas y columnas (registros y campos). Esta clase proporciona herramientas básicas para navegar y editar conjuntos de datos.

El componente Tabla es un conjunto de datos que se pueden asociar solo con una tabla de base de datos a la vez. Este conjunto de datos se forma en función del método de navegación para acceder a los datos, por lo que se recomienda el uso del componente Tabla para bases de datos locales. Cuando trabaje con bases de datos remotas, debe utilizar el componente Consulta. La conexión entre una tabla y el componente Tabla se establece a través de su propiedad TableName, que especifica el nombre de la tabla.

Los componentes para trabajar con datos se encuentran en la página DataControls (ver Figura 2) de la paleta de componentes y están destinados a construir la parte de interfaz de la aplicación.

Figura 2 - Paleta de componentes

Se utilizan para navegar por el conjunto de datos y para mostrar y editar registros.

Otros componentes se utilizan para mostrar y editar varios registros a la vez. Ejemplos de dichos componentes son DBGrid y DBCtrlGrid, que muestran los registros de un conjunto de datos en forma de tabla. Los componentes visuales para trabajar con datos son similares a los componentes correspondientes de las páginas Estándar y Adicional y se diferencian principalmente en que están enfocados a trabajar con la base de datos y tienen propiedades adicionales Fuente de datos y campo de datos. El primero apunta a la fuente de datos y el segundo apunta al campo del conjunto de datos al que está asociado el componente visual. Por ejemplo, Editar muestra un valor de cadena, lo que permite al usuario cambiarlo.

En cambio de programa contenido de estos componentes visuales, el conjunto de datos no se pone automáticamente en modo de edición. Para ello, el código primero debe llamar al método Edit del conjunto. Para guardar los cambios en los campos del registro actual, también debemos proporcionar las acciones apropiadas, como llamar al método Post o pasar a otro registro en el conjunto de datos. En la biblioteca de componentes visuales, la clase base para todos los componentes, incluidos los diseñados para trabajar con datos, es la clase Control. Proporciona atributos funcionales básicos como la posición y el tamaño del elemento, su título, color y otros parámetros. La clase Control incluye propiedades, eventos y métodos comunes a los componentes visuales.

Un control de ventana es una ventana especializada diseñada para realizar una tarea específica. Dichos elementos incluyen, por ejemplo, campos de edición, botones de comando y barras de desplazamiento.

Componentes como Editar, DBEdit, Memo o DBMemo muestran un cursor de edición en su área cuando reciben el foco de entrada. Los componentes no relacionados con la edición de información que recibe el foco de entrada generalmente se muestran usando un rectángulo negro punteado.

La propiedad Nombre apunta al nombre del componente, que se utiliza para administrar los componentes durante la ejecución de la aplicación.

La propiedad Caption contiene una cadena para el título del componente. Los caracteres individuales del título pueden estar subrayados para indicar combinaciones de teclas de acceso directo.

Los componentes visuales son capaces de generar y procesar suficiente gran número eventos varios tipos. Los grupos de eventos más comunes incluyen próximos pasos:

Seleccionar un elemento de control;

Mueva el puntero del mouse;

Presionar las teclas del teclado;

Obtener y perder el foco de entrada por parte de un elemento de control;

Mover objetos mediante el método de arrastrar y soltar.

1.3 Acceso a datos

Con el método de acceso a navegación, las operaciones se realizan en registros individuales. Cada conjunto de datos tiene un puntero al registro actual, es decir, el registro en cuyos campos se pueden realizar operaciones como editar o eliminar. Los componentes Tabla y Consulta le permiten controlar la posición de este puntero.

El método de acceso a la navegación permite realizar las siguientes operaciones:

Clasificación de registros;

Navegación de conjuntos de datos;

Editar entradas;

Insertar y eliminar registros;

Filtrar registros;

Buscar registros.

Editar registros implica cambiar los valores de sus campos. Sólo se puede editar el registro actual, por lo que antes de editar las acciones, generalmente se realizan operaciones para buscar y pasar al registro requerido. Después. Cómo se configura el puntero de registro actual la entrada deseada y el conjunto de datos está en modo de visualización, para editar el registro:

Transfiera el conjunto de datos a edición;

Cambiar el valor de los campos de registro;

El método Insert pone el conjunto de datos en modo de inserción y le agrega un nuevo registro vacío.

Para agregar una entrada necesita:

Ponga el conjunto de datos en modo de grabación;

Establecer los valores de los campos del nuevo registro;

Confirme los cambios o rechacelos.

El registro actual se elimina utilizando el método Eliminar, que solo funciona con el conjunto de datos que se está modificando. Si el registro se elimina correctamente, pasa a ser actual próxima entrada, si se eliminó el último registro, el cursor se mueve al registro anterior, que se convierte en el último después de la eliminación. A diferencia de algunos DBMS, en Delphi el registro eliminado en realidad se elimina del conjunto de datos.

No se puede especificar el orden de las entradas. De forma predeterminada, los registros no están ordenados ni ordenados. Es más conveniente trabajar con conjuntos de registros ordenados. Ordenar consiste en ordenar los registros por un campo específico en orden ascendente o descendente de los valores contenidos en el mismo. También puede ordenar por varios campos.

Al ordenar por dos campos, los registros se ordenan primero por los valores del primer campo y luego por grupos de registros con el mismo valor el primer campo está ordenado por el segundo campo. Conjuntos de clasificación Tabla de datos y la consulta se realiza de varias maneras. Los conjuntos de datos de la tabla se ordenan automáticamente según el índice actual. Cuando el índice cambia, los registros se reordenan automáticamente. Por tanto, es posible ordenar por campos para los que se ha creado un índice.

Moverse por un conjunto de datos implica gestionar el puntero del registro actual. Este puntero especifica el registro en el que se realizarán operaciones como editar o eliminar.

Antes de mover el puntero del registro actual, el conjunto de datos se pone automáticamente en modo de visualización. Si el registro actual estaba en modo de edición o inserción, antes de mover el puntero, los cambios realizados en el registro surten efecto, para lo cual el conjunto de datos llama automáticamente al método CheckBrowseMode.

A medida que navega por los registros de un conjunto de datos, los componentes visuales asociados muestran cambios en los datos y la visualización puede cambiar con bastante rapidez.

Filtrar registros consiste en establecer restricciones en los registros seleccionados para un conjunto de datos. Un conjunto de datos son registros extraídos de una o más tablas. Composición de registros en el conjunto de datos en en este momento el tiempo depende de restricciones establecidas, incluso de filtros.

El sistema Delphi permite filtrar registros:

Según la expresión;

Por rango.

Cuando se utiliza el filtrado de expresiones, el conjunto de datos se limita a registros que satisfacen la expresión de filtro que especifica las condiciones para seleccionar registros.

La ventaja de filtrar por expresión es que es aplicable a cualquier campo, incluidos los no indexados. Debido a que durante el proceso de selección se ven todos los registros de la tabla, el filtrado por expresión es efectivo para una pequeña cantidad de registros.

Para especificar una expresión de filtro, es una construcción que puede incluir los siguientes elementos:

Nombres de campos de tabla;

Literales;

Operaciones de comparación;

Operaciones aritméticas;

Operaciones lógicas;

Corchetes y corchetes.

Si el nombre del campo contiene espacios, se incluye entre corchetes. Los nombres de variables no se pueden utilizar en una expresión de filtro. Si la expresión de filtro necesita incluir el valor de una variable o propiedad de cualquier componente, entonces este valor debe convertirse a tipo de cadena. Las operaciones de comparación son relaciones ordinarias.<,>,=,<=,>=,<>. Los operadores aritméticos son +, -, * y /. Como operaciones lógicas Se pueden utilizar Y, O y NO. Los paréntesis se utilizan para cambiar el orden en que se realizan las operaciones aritméticas y lógicas.

El conjunto de datos de la tabla permite dos formas de establecer condiciones de filtrado: utilizando una expresión de filtro Filter y en el controlador de eventos OnFilterRecord.

Al filtrar por rango, el conjunto de datos incluye registros cuyos valores de campo se encuentran dentro rango dado, es decir. la condición de filtrado es una expresión de la forma "valor>límite inferior Y valor< верхней границы". Такая фильтрация применяется к наборам данных Table.

Para habilitar o deshabilitar el filtrado de rango, utilice los métodos ApplyRange y CancelRange. El primero de ellos activa el filtrado y el otro lo desactiva. preliminar para campo de índice o campos por los que se realiza el filtrado, debe especificar un rango de valores aceptables. Cuando no se especifica uno de los límites del rango, el rango está abierto, es decir, el límite inferior se vuelve igual al mínimo posible y el límite superior se vuelve igual al máximo. posible significado este campo.

Encontrar un registro que satisfaga determinadas condiciones significa acudir a ese registro. La búsqueda es similar al filtrado en muchos aspectos porque el proceso de búsqueda también verifica los campos de los registros para determinar ciertas condiciones.

La diferencia es que la búsqueda no cambia la cantidad de registros en el conjunto de datos. Al organizar una búsqueda de registros, es importante tener un índice de los campos que se buscan. La indexación aumenta significativamente la velocidad del procesamiento de datos; además, varios métodos solo pueden funcionar con campos indexados.

Para buscar registros por campos, utilice los métodos Localizar y Buscar, y es posible que los campos no estén indexados. La función Localizar busca un registro con los valores de campo dados. Si existen registros que satisfacen las condiciones de búsqueda, el puntero del registro actual se establece en el primero. Si se encuentra la entrada, la función devuelve Verdadero; en caso contrario, Falso. Normalmente, al desarrollar una aplicación, el usuario tiene la oportunidad de influir en el proceso de búsqueda mediante controles ubicados en el formulario. La función Buscar también busca un registro que cumpla ciertas condiciones, pero, a diferencia del método Locate, no mueve el puntero del registro actual, sino que lee información de los campos del registro. Otra diferencia entre los dos métodos es que el método de búsqueda realiza una coincidencia que distingue entre mayúsculas y minúsculas entre los valores de búsqueda y los valores en los campos de registro.

2. Desarrollo de la base de datos "Biblioteca"

Para desarrollar el programa "Base de datos "Biblioteca" "un interactivo orientado a objetos Entorno de Delfos 7.

La base de datos consta de una tabla que tiene tipo moderno"Acceso" con tipos de campos extendidos. El acceso a los datos se producirá a través del subsistema Delphi ADO.

La tabla "Biblioteca" contendrá todos los datos necesarios para el trabajo; la descripción de los campos de la base de datos se encuentra en la Tabla 1.

Tabla 1 - Tabla "frukt"

Descripción

Texto

Contiene el código de un libro o publicación.

Texto

Nombre de la sección

Texto

Texto

Título del libro

Texto

Se indica el año de publicación.

Texto

Nombre de la editorial que publicó el libro.

Texto

Apellido e iniciales del lector.

Texto

número de tarjeta de biblioteca

Fecha hora

fecha de emisión del libro

Texto

Contiene una nota que indica que una copia del libro ha sido devuelta o está en mano.

2.1 Interfaz del programa

Para iniciar el programa, debe hacer doble clic en el archivo biblioteka.exe. Después del lanzamiento, aparece el formulario principal de trabajo (ver Figura 3).

Figura 3 - Formulario principal de la solicitud

El formulario contiene varias secciones:

1. botones de menú;

2. panel de búsqueda y filtrado de información;

3. sección para ver el contenido de la base de datos;

4. Botones de navegación y edición de datos.

Inicialmente, los botones de edición de datos no están activos; para activarlos es necesario presionar el botón “Editar”. A continuación, la tabla pasa al modo de edición. Cabe señalar que al agregar datos a una tabla, algunos campos contienen listas anidadas; por ejemplo, al agregar datos al campo "Sección", la tabla se ve como se muestra en la Figura 4.

Figura 4: Agregar datos a la tabla

La figura 5 muestra el resultado de aplicar el filtro.

Figura 5 - Resultado del filtrado de datos

Para mostrar todos los registros, haga clic en el botón "Todos los registros".

Para imprimir datos, seleccione el botón "Imprimir". El informe se genera en MS Excel. La vista del informe se muestra en la Figura 6.

Figura 6 - Salida de datos

Al cerrar sesión, aparece la ventana que se muestra en la Figura 7.

Conclusión

Durante el trabajo del curso se desarrolló un programa “Biblioteca” con la siguiente funcionalidad:

1) ver y editar datos;

2) búsqueda de información

3) filtrado de datos;

5) imprimir datos;

En conclusión, podemos decir que el programa creado es simple, fácil de usar, ya que los datos se muestran en una tabla, guarda gran número tiempo. Este programa está disponible para cualquier persona que trabaje en una biblioteca y tenga conocimientos básicos de informática.

El programa tiene un gran potencial. En el futuro, la funcionalidad del programa podría ampliarse agregando varias funciones. Por ejemplo, agregue varios tipos nuevos de búsqueda y clasificación al programa, agregue una función para ver datos en forma de gráficos (para mayor claridad de los datos). También puede agregar una función para agregar tablas para obtener más funciones.

Lista de literatura usada

1. Darakhvelidze P.G., Markov E.P. Delphi 2005 para Win32. - San Petersburgo: BHV-Petersburgo, 2005. - 1136 p.

2. Borovsky A.N. Programación en Delphi 2005. - San Petersburgo: BHV-Petersburg, 2005. - 448 p.

3. Gofman V.E., Khomonenko A.D. Trabajar con bases de datos en Delphi. - San Petersburgo: BHV-Petersburgo, 2011. - 656 p.

4. Romanchik V.S., A.E. Lyulkin, "Programación en Delphi 7: un manual para estudiantes". Minsk: BSU, 2007. - 128 págs.;

5. Gofman V.E., Khomonenko A.D. Delfos. Inicio rápido. - San Petersburgo: BHV-Petersburgo, 2003. - 288 p.

Apéndice A

Listado de programas

Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formularios,

Diálogos, DB, ADODB, Grids, DBGrids, StdCtrls, Botones, ExtCtrls, DBCtrls, OleServer, ComObj,

TForm1 = clase(TForm)

Barra de control1: TControlBar;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

GroupBox1: TGroupBox;

BitBtn5: TBitBtn;

DBGrid1: TDBGrid;

ADOTable1: TADOTable;

Fuente de datos1: TDataSource;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

DBNavigator1: TDBNavigator;

Aplicación Excel1: Aplicación TExcel;

BitBtn6: TBitBtn;

BitBtn7: TBitBtn;

BitBtn8: TBitBtn;

procedimiento BitBtn3Click(Remitente: TObject);

procedimiento BitBtn4Click(Remitente: TObject);

procedimiento FormClose(Remitente: TObject; var Acción: TCloseAction);

procedimiento BitBtn2Click(Remitente: TObject);

procedimiento BitBtn5Click(Remitente: TObject);

procedimiento RadioButton1Click (Remitente: TObject);

procedimiento RadioButton2Click(Remitente: TObject);

procedimiento BitBtn1Click(Remitente: TObject);

procedimiento BitBtn6Click(Remitente: TObject);

procedimiento BitBtn8Click(Remitente: TObject);

procedimiento BitBtn7Click(Remitente: TObject);

(Declaraciones privadas)

(Declaraciones públicas)

Ejemplo: OleVariant;

// MiDir:Cadena;

procedimiento TForm1.BitBtn3Click(Remitente: TObject);

ADOTable1.Filtered:=falso;

procedimiento TForm1.BitBtn4Click(Remitente: TObject);

Solicitud.Terminar;

procedimiento TForm1.FormClose(Remitente: TObject; var Acción: TCloseAction);

si MessageDlg("¿Está seguro de que desea cerrar la aplicación?",mtConfirmation,,0)=mrCancel entonces Abortar;

Solicitud.Terminar;

procedimiento TForm1.BitBtn2Click(Remitente: TObject);

//bm: TBookmark;

col, fila,i: Entero;

ExcelApp, libro de trabajo, columna, hoja: OLEVariant;

Archivo de plantilla,cn,un:String;

PRes:= StrAlloc(Tamaño);

BRes:= GetComputerName(PRes, Tamaño);

si BRes entonces cn:= StrPas(PRes);

Tamaño:= MAX_COMPUTERNAME_LENGTH + 1;

PRes:= StrAlloc(Tamaño);

BRes:= GetUserName(PRes, Tamaño);

si BRes entonces un:= StrPas(PRes);

Pantalla.Cursor:= crArrow;

DBGrid1.DataSource.DataSet.DisableControls;

DBGrid1.DataSource.DataSet.Primero;

// crear un objeto de Excel

ExcelApp:=CreateOleObject("excel.aplicación");

Excelapp.Application.EnableEvents:=falso;

ExcelApp.WorkBooks.Add(xlWBatWorkSheet);

ExcelApp.WorkBooks.WorkSheets.name:= "Informe";

ExcelApp.Visible:= falso;

Columna:=ExcelApp.Workbooks.WorkSheets["Reporte"].Columnas;

si DBGrid1.Columns.Visible entonces comienza

Colum.Columns[i].ColumnWidth:=25;Inc(i);

Columna:=ExcelApp.Workbooks.WorkSheets["Reporte"].Filas;

Colum.Rows.Font.Bold:=verdadero;

Tamaño.de.fuente.de.filas.de.columna:=8;

Colum.Rows.Font.Bold:=verdadero;

Color.de.fuente.de.filas.de.columna:=0;

Tamaño.de.fuente.de.filas.de.columna:=10;

ExcelApp.Visible:= falso;

mem:= TMemo.Create(Self);

mem.Visible:= falso;

mem.Parent:= Formulario1;

sline:=("Datos de la biblioteca"+#9+DateToStr(fecha)++#9+TimeToStr(Hora));

mem.Lines.Add(línea);

para col:= 0 a DBGrid1.FieldCount-1 hacer

si DBGrid1.Columns.Visible entonces

línea:= línea + form1.DBGrid1.Columns.Title.Caption + #9;

mem.Lines.Add(línea);

mem.Lines.Add("");

para fila: = 0 a form1.DBGrid1.DataSource.DataSet.RecordCount-1 hacer

para col:= 0 a form1.DBGrid1.FieldCount-1 hacer

si form1.DBGrid1.Columns.Visible entonces

línea:= línea + form1.DBGrid1.Fields.AsString + #9;

mem.Lines.Add(línea);

form1.DBGrid1.DataSource.DataSet.Next;

si form1.DBGrid1.DataSource.DataSet.Eof entonces Romper;

mem.CopyToClipboard;

ExcelApp.Visible:= verdadero;

ExcelApp.Workbooks.WorkSheets["Informe"].Pegar;

Aplicación Excel1.Gratis;

form1.DBGrid1.DataSource.DataSet.EnableControls;

Pantalla.Cursor:= crArrow;

procedimiento TForm1.BitBtn5Click(Remitente: TObject);

si ADOTable1.Locate("avtor",Edit1.Text,) entonces DBGrid1.SetFocus en caso contrario

MessageDlg("BÚSQUEDA FALLADA", mtConfirmation,,0);

procedimiento TForm1.RadioButton1Click (Remitente: TObject);

ADOTable1.Filter:="izdatelstvo="+""""+Edit1.Text+"""";

ADOTable1.Filtered:=verdadero;

procedimiento TForm1.RadioButton2Click(Remitente: TObject);

ADOTable1.Filter:="razdel="+""""+Edit1.Text+"""";

ADOTable1.Filtered:=verdadero;

procedimiento TForm1.BitBtn1Click(Remitente: TObject);

BitBtn6.Enabled:=verdadero;

BitBtn7.Enabled:=verdadero;

BitBtn8.Enabled:=verdadero;

procedimiento TForm1.BitBtn6Click(Remitente: TObject);

ADOTable1.Insertar;

procedimiento TForm1.BitBtn8Click(Remitente: TObject);

procedimiento TForm1.BitBtn7Click(Remitente: TObject);

si MessageDlg("¿Está seguro de que desea eliminar la entrada?",mtConfirmation,,0)=mrCancel entonces Abortar;

ADOTable1.Delete;

Publicado en Allbest.ru

Documentos similares

    Consideración de la teoría y tecnología de trabajar con el entorno de programación Delphi. Descripción Descripción de la interfaz del programa, estructura de datos, generación de puntos. Desarrollo de una tarea para identificar todos los cuadrados que pueden formar puntos de un plano.

    resumen, añadido el 13/01/2015

    Desarrollo de un programa para trabajar con la base de datos "Biblioteca" en el entorno Borland C++Builder 6 en el lenguaje de programación C++ utilizando ayudas visuales. La estructura de la información, su conexión y su visualización. Descripción de la interfaz de usuario.

    trabajo del curso, agregado 19/05/2014

    Familiarización con la historia de la creación y las características del lenguaje de programación orientado a objetos Delphi. Desarrollo de una aplicación que registra el número de repeticiones de una palabra en el texto ingresado en el campo MEMO. Descripción de la interfaz del programa.

    trabajo del curso, añadido el 21/04/2015

    Características del desarrollo de aplicaciones para el sistema operativo utilizando el lenguaje de programación imperativo, estructurado y orientado a objetos Delphi. Inicio formal del programa. Seleccionar el final de un bloque de programa. Listado y descripción del programa.

    trabajo del curso, añadido el 04/08/2014

    Principales etapas del desarrollo e implementación de software. Concepto, funciones y clasificación de las bases de datos. Diseño de la base de datos "Biblioteca" para mantener un fichero y registrar la emisión de libros. Interfaz de usuario del programa, metodología de prueba.

    tesis, añadido el 09/06/2012

    Desarrollo de una aplicación de base de datos mediante programación visual y orientada a objetos. Repaso del lenguaje de elementos del lenguaje de programación Delphi. Diseño de una base de datos de gasolineras. Sistema cliente de aplicaciones.

    trabajo del curso, añadido el 31/01/2016

    Características generales modelo infológico del sistema de información. Introducción a las características de diseño de la base de datos de la Biblioteca, análisis de las principales etapas. Consideración de formas de escribir consultas para recuperar información de tablas de bases de datos.

    prueba, añadido el 08/12/2013

    Metodología y principales etapas de la creación de una base de datos en la biblioteca, información reflejada en la misma y características funcionales. El procedimiento para construir un modelo de base de datos lógico de información. Características de la implementación de la interfaz de usuario mediante formularios.

    trabajo del curso, añadido el 19/10/2010

    Desarrollo de un sistema que automatiza el mantenimiento de una base de datos bibliotecaria. Requisitos básicos para software. Modelos de representaciones locales. Arquitectura del sistema de información. Procedimientos almacenados. Script SQL para crear una base de datos. Texto del programa.

    tesis, agregada el 28/01/2014

    Consideración de los conceptos básicos del uso de tecnologías de la información en la actividad hotelera. Seleccionar un sistema de gestión de bases de datos. Descripción de las tecnologías de la información. Ejecución implementación de software en el entorno de programación orientada a objetos Delphi 7.

DLL- Dynamic Link Library, o biblioteca de enlaces dinámicos, que permite reutilizar las mismas funciones en diferentes programas. De hecho, es una herramienta bastante útil, especialmente porque la biblioteca, una vez escrita, se puede utilizar en muchos programas. En la lección de hoy aprenderemos a trabajar con dll¡Y por supuesto crearlos!
Bueno, ¡comencemos!

Primero, ¡creemos nuestra primera biblioteca de vínculos dinámicos! vamos a Delfos e inmediatamente vaya al menú Archivo -> Nuevo -> Otro.
La siguiente ventana aparece frente a nosotros:

Seleccione Biblioteca de vínculos dinámicos de la lista (en versiones anteriores a 2009 Delfos El elemento se llama Asistente DLL).

Como resultado, solo tenemos una ventana con el código; ¡tenga en cuenta que no tenemos ningún formulario aquí!
Ahora comienza la diversión. Escribamos nuestros primeros procedimientos en la biblioteca.

bibliotecaProyecto2;
//Probablemente ya hayas notado que en lugar de programar
//al crear una dll, se utiliza la palabra biblioteca.
//Biblioteca de significados.
usos
SysUtils, cuadros de diálogo,
Clases; // ¡Atención! No olvide especificar estos módulos,
// de lo contrario el código no funcionará

($R *.res)
(EL CÓDIGO DLL SE COLOCA EN ESTA PARTE)

Procedimiento Primera Llamada; llamada estándar; exportar;
//Stdcall: con este operador, los parámetros se insertan en la pila
//de derecha a izquierda y alineado con el valor estándar
//La exportación puede, en principio, omitirse, utilizarse para clarificación
//exportar un procedimiento o función.

Comenzar
Mostrar mensaje(" Mi primer procedimiento en dll");

Fin;

Procedimiento Doble Llamada; llamada estándar; exportar;
Comenzar
Mostrar mensaje(" mi segundo procedimiento");
//Llamar un mensaje en la pantalla
Fin;

Exporta FirstCall, DoubleCall;
//Exportaciones contiene una lista de elementos exportados.
//El cual luego será importado por algún programa.

comenzar
Fin.

Nos detendremos aquí por ahora porque... Para ejemplo sencillo esto será suficiente. Ahora guardamos nuestro proyecto, yo personalmente lo guardé con el nombre Project2.dll y presioné la combinación de teclas CTRL+F9 para compilar la biblioteca. En la carpeta donde guardó el archivo dpr, aparecerá un archivo con la extensión dll, esta es nuestra biblioteca recién creada. Lo tengo llamado Project2.dll

Ahora comencemos a llamar a procedimientos desde esta biblioteca. Creamos una nueva aplicación según el esquema estándar. Ante nosotros no hay nada inusual, solo una forma. Guarde la nueva aplicación en alguna carpeta. Y copie el recién creado en la misma carpeta. biblioteca dll. Aquellos. V en este ejemplo proyecto2.dll

Ahora tienes que elegir cómo llamar a las funciones de la biblioteca. Hay dos métodos de llamada en total.

Método número 1
Quizás este sea el método más sencillo para llamar a procedimientos ubicados en la biblioteca.
Ideal para trabajar con una sola biblioteca.

Bueno, vámonos...
Después de la palabra clave de implementación, escriba el siguiente código:

Procedimiento Primera Llamada; llamada estándar; "Project2.dll" externo;
// En lugar de Project2.dll puede haber cualquier nombre de biblioteca

Procedimiento Doble Llamada; llamada estándar; "Project2.dll" externo;

Aquí, como probablemente ya habrás adivinado, le decimos al programa los nombres de nuestros procedimientos y le decimos que están en biblioteca dll, en mi caso llamado Project2.dll

Ahora, para poder llamar a estos procedimientos, sólo necesitamos insertar sus nombres en cualquier parte del código, lo cual haremos ahora. Coloque 2 componentes de botón de la pestaña Estándar en el formulario y cree un controlador de eventos OnClick en cada uno

Al hacer clic en el primer botón:


Comenzar
Primera llamada;
Fin;

Al hacer clic en el segundo botón:


Comenzar
doble llamada; //Nombre del procedimiento que esta en la dll
Fin;

¡Eso es todo!

Método número 2:
Más complejo que el primero, pero tiene sus ventajas y, lo más importante, es ideal para complementos.
Para uso este método, antes que nada declaramos varias variables globales:

var
LibHandle: HModule; //Enlace al módulo de biblioteca
Primera Llamada: procedimiento; llamada estándar;
//Nombres de nuestros procedimientos ubicados en la biblioteca.

Doble Llamada: procedimiento; llamada estándar;

Luego, después de la palabra clave de implementación, escribiremos un procedimiento que cargará nuestra biblioteca:

Procedimiento LoadMyLibrary (Nombre de archivo: Cadena);
Comenzar
LibHandle:= LoadLibrary(PWideChar(Nombre de archivo));
//¡Cargando la biblioteca!
// ¡Atención! PChar para versiones inferiores a 2009 de Delphi
Si LibHandle = 0 entonces comienza
Cuadro de mensaje(0,"",0,0);
Salida;
Fin;
Primera llamada:= GetProcAddress(LibHandle,"Primera llamada ");
//Obtiene un puntero al objeto
// enlace del primer parámetro al módulo de biblioteca
//Nombre del objeto del segundo parámetro en dll

DobleCall:= GetProcAddress(LibHandle,"DoubleCall");
Si @FirstCall = nil entonces comienza

Cuadro de mensaje(0," No se puede cargar la biblioteca",0,0);
Salida;
Fin;
Si @DoubleCall = nil entonces comienza
//Comprueba la presencia de esta función en la biblioteca.
Cuadro de mensaje(0," No se puede cargar la biblioteca",0,0);
Salida;
Fin; Fin;

Luego en el formulario creamos un controlador de eventos OnCreate, en el cual, usando el procedimiento recién creado, cargaremos nuestro biblioteca

Procedimiento TForm1.FormCreate(Remitente: TObject);
Comenzar
LoadMyLibrary("Proyecto2.dll ");
Fin;

Ahora nuevamente, para causar procedimientos necesarios de nuestra biblioteca, sólo necesitamos insertar sus nombres en cualquier parte del código. Para hacer esto, coloque 2 componentes de botón de la pestaña Estándar en el formulario y cree un controlador de eventos OnClick en cada uno.

Al hacer clic en el primer botón:

Procedimiento TForm1.Button1Click(Remitente: TObject);
Comenzar
Primera llamada; //Nombre del procedimiento que esta en la dll
Fin;

Al hacer clic en el segundo botón:

Procedimiento TForm1.Button2Click(Remitente: TObject);
Comenzar
doble llamada; //Nombre del procedimiento que esta en la dll
Fin;

Y finalmente, creamos un controlador de eventos OnDestroy en el formulario, en el que descargamos biblioteca dll de memoria

Procedimiento TForm1.FormDestroy(Remitente: TObject);
Comenzar
Biblioteca gratuita(LibHandle);
//Descarga la biblioteca de la memoria.
Fin;

¡Eso es todo! El segundo método resultó bastante engorroso, pero su ventaja es aclarar el objeto almacenado en la biblioteca.

PD ¿Quiere recibir las últimas lecciones en vídeo, podcasts de audio y artículos sobre Delphi antes que todos los demás visitantes del sitio?
¿Participar en concursos y unirse poco a poco a nuestro equipo?
Entonces suscríbete ahora mismo al boletín multimedia gratuito del sitio.
¡Ya somos más de 3500 personas!

Una biblioteca DLL le permite combinar código reutilizable en un todo. Las funciones de las bibliotecas DLL se pueden vincular dinámicamente en tiempo de ejecución, a diferencia de las funciones de los paquetes Delphi, que se vinculan estáticamente en la etapa de compilación de la aplicación.

Para crear una biblioteca DLL, primero debe ejecutar el comando de menú Archivo|Nuevo|Otro y seleccionar el elemento Asistente DLL en la página Nuevo del cuadro de diálogo Nuevo elemento.

El asistente de DLL creará automáticamente una plantilla en blanco para la DLL. A diferencia de un módulo normal, que comienza con la palabra clave unidad, un módulo de biblioteca DLL comienza con la palabra clave biblioteca. La sección de usos del módulo DLL requiere la inclusión de solo dos paquetes: SysUtils y Classes.

La creación de una función DLL consta de varios pasos:

1. Primero, en la sección de implementación del módulo, debe ingresar la firma de la función y programar el código que ejecuta la función.

3. Finalmente, una función que se supone que debe usarse no solo dentro de un módulo, sino también desde otras aplicaciones, debe declararse como exportable en la sección de exportaciones.

Las funciones desde una DLL se pueden llamar tanto desde aplicaciones desarrolladas en Delphi como desde aplicaciones escritas en otros lenguajes de programación, como C++.

El orden de asignación de memoria para parámetros y liberación es diferente para diferentes idiomas programación. Para evitar un error en tiempo de ejecución, la declaración de función en la DLL y la declaración de función en la aplicación deben usar el mismo mecanismo de paso de parámetros. Al declarar un procedimiento o función, se puede especificar uno de los siguientes mecanismos para pasar parámetros:

El método para pasar parámetros se indica con un punto y coma después de la descripción de la función. Por ejemplo:

función F1 (X, Y, Z: Real]: Real; stdcall;.

varias maneras los pases de parámetros definen el orden en el que se pasan los parámetros (de izquierda a derecha o de derecha a izquierda) y también indican quién desasignará la memoria de la pila (el procedimiento llamado o el procedimiento que llama). Cuando utilice archivos DLL como componentes llamados desde aplicaciones en otros lenguajes de programación, debe utilizar el modificador de llamada adecuado. Para aplicaciones C++, se utiliza el modificador de llamada stdcall.

Para que una función descrita en una DLL pueda llamarse desde otra aplicación, la función debe exportarse. La lista de todas las funciones exportadas se indica en la sección de exportaciones, separadas por comas.

y termina con punto y coma. Las funciones de exportación se pueden realizar de tres maneras:

Por el nombre de la función utilizada en la DLL;

Por nombre de función especificado como nombre de exportación;

Por el índice asignado a la función.

Para asignar un determinado índice a una función, se debe especificar en la sección de exportaciones después del nombre de la función con palabra claveíndice.

Para que la función exportada sea llamada con un nombre diferente al nombre utilizado en la DLL, en la sección de exportaciones después del nombre de la función, debe especificar el nombre de la palabra clave y el nuevo nombre de exportación para esta función.

DLL: la biblioteca no es un módulo ejecutable. Para obtener su código basta con compilar el proyecto.

proyecto de biblioteca;

SysUtils, Clases;

función F1(X, Y: Entero): Entero; llamada estándar;

Vincular estáticamente una biblioteca DLL

La DLL se puede vincular de forma estática o dinámica. Cuando incluye una DLL, se carga en la memoria de la aplicación.

Con una conexión estática, la DLL se carga una vez cuando se inicia la aplicación. Durante la ejecución de la aplicación, el nombre de una función importada desde una DLL que estaba vinculada estáticamente apunta a la misma función (el punto de entrada a la DLL) en la misma DLL. Todas las funciones de la DLL que se utilizarán inicialmente en la aplicación deben declararse como externas. En este caso, deberá especificar, si es necesario, un modificador de llamada. Si se llama a una función por índice, se le debe dar el nombre utilizado en la aplicación y el índice de la función en la DLL.

anuncios funciones externas ejecutado en la sección de implementación antes de usar estas funciones.

Declaración de exterior funciones con la palabra clave externa especifica que se utilizarán enlaces estáticos.

TForml = clase(TForm)

Editar: TEdit; [Campo para ingresar el primer valor)

Edición2: TEditar; (Campo para ingresar el segundo valor)

Editar3: TEditar; (Campo para mostrar el resultado

ejecutar una función desde una DLL)

Botón: TButton; (Se realiza una llamada a la función utilizada por nombre)

Botón2: TBotón; [Se realiza una llamada a una función usando el índice)

procedimiento ButtonlClickfSender: TObject);

procedimiento Button2Click(Remitente: TObject);

(Declaraciones privadas)

(Declaraciones públicas)

(Declaración de funciones exportadas)

función Fl (i: Entero; j: Entero): Entero; llamada estándar;

"Projectl.dll" externo;

función F2 (i: Entero; j: Entero): Entero; llamada estándar;

externo "Projectl.dll índice 2;

procedimiento TForml.ButtonlClick (Remitente: TObject);

(Llamar a la función exportada)

Editar3.Texto:=IntToStr(Fl(StrToInt(Editar.Texto),StrToInt(Editar2.Texto) ));

procedimiento TForml.Button2Click(Remitente: TObject);

Edit3.Text:=JntToStr(F2(StrToInt(Editl.Text),StrToInt(Edit2.Text)));

Vincular dinámicamente una biblioteca DLL

A diferencia de conexión estática La biblioteca DLL se ejecuta en el momento en que se carga la aplicación, la conexión dinámica de la biblioteca DLL se puede realizar en cualquier punto de la ejecución del programa. Después de llamar a una función desde una DLL, puede desactivarla. En uso simultáneo varias bibliotecas DLL, esto proporciona importantes ahorros de memoria. Para conexión dinámica Se utilizan funciones DLL API de Windows. API de Windows - este es un conjunto características estándar, utilizado para implementar la interacción con el sistema operativo.

Al llamar a una función desde una DLL vinculada dinámicamente, en lugar de definir el nombre de la función como externo en caso enlace estático debe ser determinado nuevo tipo, correspondiente al tipo de función que se llama, y ​​crea una variable de este tipo.

Para realizar una llamada de función desde una DLL de enlace dinámico, siga estos pasos:

1. Cree un nuevo tipo. correspondiente al tipo de la función llamada (el nombre del nuevo tipo se puede ingresar después de la sección de tipo).

Por ejemplo:

TMyFl=función(i,j:Entero):Entero; llamada estándar;

2. En la sección var de la sección de interfaz del módulo, cree una variable del tipo de función creada. Por ejemplo: MyFl: TMyFl;

3. Antes de cargar la DLL, declara tipo de variable Entero, que contendrá el descriptor de la biblioteca que se está conectando.

4. Llame al método LoadLibrary, que carga la DLL. Por ejemplo; h:=LoadLibrary("Projectl.dll");

5. Compruebe si la conexión de la biblioteca es exitosa. Si el nombre de la DLL es incorrecto o no se encuentra la DLL, la función LoadLibrary devolverá 0.

6. Si conecta correctamente la biblioteca DLL, lo siguiente que deberá obtener es la dirección de la función. Para este fin se utiliza función de Windows API GetProcAddress, cuyos parámetros son el descriptor de la biblioteca DLL y el nombre de la función conectada. Por ejemplo: @MyFl: =GetProcAddress(h, "Fl");

7. Si se recibe la dirección de la función, entonces el valor de la dirección (en nuestro ejemplo @MyFl) no debe ser igual a cero.

8. En este punto, puede llamar a una función desde una DLL vinculada dinámicamente.

9. Para liberar y, por lo tanto, descargar la DLL, llame al método FreeLibrary, que deshabilita la DLL.

Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos,

Controles, formularios, cuadros de diálogo, StdCtrls;

TForml = clase(TForm)

Botón3: TBotón;

procedimiento Botón3Clic

procedimiento TForml.Button3Click(Remitente: TObject);

h:=LoadLibrary("Projectl.dll");

si h<>0 entonces

@MyFl:=GetProcAddress(h,"Fl");

si @MyFl<>nulo entonces

Edit3.Text:=IntToStr(MyFl(StrToInt(Editl.Text),

StrToInt(Edit2.Texto)));

Usar una DLL para llamar a cuadros de diálogo modales comunes.

El resultado de ejecutar un procedimiento desde una biblioteca DLL puede ser la visualización de algún diálogo modal. Para hacer esto, cree un objeto de formulario en el método exportado, muéstrelo como un cuadro de diálogo modal y luego elimine el objeto de formulario. En este caso, el formulario en sí debería proporcionar una llamada al método Close para finalizar el diálogo.

Para crear un formulario, utilice el método Create, al que se le pasa un puntero a formulario para padres- el formulario de la solicitud de convocatoria. Este parámetro se pasa a la función DLL llamada.

proyecto de biblioteca;

Unitl_DLL en "Unitl_DLL.pas" (Formulario);

procedimiento MyModalForm (var Z:Integer;F:TForm1); llamada estándar;

Formulario1:=TForml.Create(F);

(El parámetro F se pasa al llamar al procedimiento y contiene un puntero

al formulario principal: el formulario de la solicitud de llamada)




Arriba