Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Llamadas a DLL (https://www.clubdelphi.com/foros/showthread.php?t=87592)

atani123 28-01-2015 12:13:02

Llamadas a DLL
 
A ver, os cuento el problema a ver cual creeis que es la mejor solucion.

Tengo una aplicacion que con unos parametros que recibe de 'da igual donde' realiza unos calculos. Pues bien, esos calculos deben de ser diferentes para cada cliente, y mi idea es crear varias dll y que la aplicacion llame a una u otra depende del cliente. Pongo un ejemplo

Tengo una serie de numeros, 4, 5, 6 y 7.

El cliente A quiere que le muestre por pantalla la suma de los numero 4+5+6+7=22
El cliente B quiere que le muestre el numero mas alto (4,5,6,7)=7
El cliente C quiere que le muestre la media (4+5+6+7)/4=5.5
El cliente D quiere que le envie por RS232 el numero mas alto 7

Visto esto seria un absurdo hacer 4 programas diferentes, por lo que he creado un unico programa donde a groso modo hago esto

Inicio de la aplicacion
Si cliente = A entonces LoadLibrary( 'ClienteA.dll')
Si cliente = B entonces LoadLibrary( 'ClienteB.dll')
Si cliente = C entonces LoadLibrary( 'ClienteC.dll')
Si cliente = D entonces LoadLibrary( 'ClienteD.dll')

todas las dll tienen un procedimiento llamado 'Procesardatos';
........
Instruccion 001;
Instruccion 002;
Instruccion 003;
Procesardatos( 4,5,6,7); //Aqui ejecuta el procesardatos de la dll que tenga cargada
Instruccion 004;
Instruccion 005;
fin del programa
........

¿Que tal veis esta solucion?, ¿Alguna forma mejor de hacerlo?

engranaje 28-01-2015 13:55:59

Igual para tu caso en concreto la idea que planteas es la mejor, despues de todo lo conoces bien.

En mi opinión y mas genéricamente, en lugar de distintas dll tendría distintos procedimientos y decidiría cual lanzar dependiendo de una configuración que almacenariamos en el registro de windows, en un ini, o en un fichero con el formato que tengamos. Si es una aplicación de consola también puedes decidir añadir un primer parametro y que dependiendo del valor de este se decida que hacer con los siguientes.

Esto permitiria a un cliente realizar cualquiera de los procesos posibles, incluso los 3 solo cambiando un parametro de configuración. Yo las dll las dejo solo para cuando lo que tengo que ejecutar debo lanzarlo desde varias aplicaciones distintas y tampoco siempre.

atani123 28-01-2015 15:00:16

Lo comento porque el tema de las dll o no lo controlo bien o windows no las gestiona bien, ya que casi siempre que las he utilizado el pc acaba volviendose lento, cosa que se soluciona reiniciando.

Tengo que decir que el PC puede tirarse semanas incluso meses trabajando en la aplicacion las 24 horas de dia.

Neftali [Germán.Estévez] 28-01-2015 15:49:55

A mi no me parece un mal enfoque.
Puedes decidir entre BPL's o DLL's.

engranaje 30-01-2015 09:51:19

Sobre la dll que realentizan el pc.. yo utilzo dll que también estan trabajando todo el día y no noto que realentizen el equipo. Es verdad que con mis primeras dll si me pasaba pero era porque no liberaba bien la memoria y al final con cada nueva llamada que hacía a alguna función de la dll mas memoria que utilizaba.

Puedes revisar eso, si las dll las enlazas en estatico y no tienes cuidado con como creas y liberas los objetos la dll puede empezar a ocupar cada vez mas memoria. El problema mas habitual que me he encontrado con las dll es que según lo que haga en ellas a ciertos antivirus no les gusten.

AgustinOrtu 30-01-2015 20:01:09

Pero eso seria lo mismo que hacer algo como esto

Código Delphi [-]

interface
  procedure ClienteA;
  procedure ClienteB;
  procedure ClienteC;
  procedure ClienteD;

...

implementation

procedure InicioDelPrograma;
begin
  case Cliente of
    A: ClienteA;
    B: ClienteB;
    C: ClienteC;
    D: ClienteD;
  end;
end;

Yo lo que quiero decir es que tu programa no tiene que andar preguntando a ver que cliente es (y cuando tengas 1 millon de clientes vas a estar 1 millon de veces preguntando a ver cual es ???)

Lo que debes hacer es tener varias versiones de la DLL si, pero luego cuando entregas tu programa le pones un nombre generico a la dll, y tu programa lo que hace es cargar siempre esa dll y ejecutar el procesardatos

Me explico?


La franja horaria es GMT +2. Ahora son las 19:29:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi