Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   parametros entre dll's (https://www.clubdelphi.com/foros/showthread.php?t=5421)

xgerard 20-11-2003 20:33:59

parametros entre dll's
 
hola a todos ...

estoy haciendo un proyecto que requiere el uso de varias dll (dos para ser exacto) ... la descripcion general es la siguiente : la interfaz , 1er dll con validaciones , 2 dll que se conecta a la base de datos...

el problema que tengo es al pasar parametros entre los dll, el proyecto manda error de memoria y se bloquea ... en cambio si no uso paso de parametros entre los dll la aplicacion funciona correctamente , desafortunadamente debe cumplir con el requisito de usar 2 dll...

espero que me puedan ayudar ...

si necesitan mas info por favor diganmelo

delphi.com.ar 20-11-2003 20:47:16

¿Cómo es que estas pasando estos parámetros?

xgerard 20-11-2003 21:01:26

asi tengo declarado dentro del 1er dll :

procedure alta(nom, mae : PChar; ed, grad : integer);register; external 'conexion.dll';

/////esta es la funcion donde hago el llamado ...

function valida_alumno(nombre, maestra : string; edad, grado : integer ): integer; stdcall;
begin
if (nombre = '') then
Result := 1
else
if (edad<5 )or(edad >12) then
Result:=2
else
if(grado<1) or (grado>6) then
Result :=3
else
if (maestra = '') then
Result := 4
else
begin
alta(PChar(nombre),PChar(maestra),edad,grado);
Result := 0;
{llamar al dll de conexion a la BD}
end
end;

///este es el cuerpo de la funcion en el 2o dll

procedure alta(nombre, maestra : PChar; edad, grado : integer); register;
var
database : TADOConnection;
query: TADOQuery;
begin
database.Connected := false;
database.ConnectionString :='Provider=MSDASQL.1;Password=colegio;Persist Security Info=True;User ID=colegio;Data Source=myodbc3-test';
database.Connected := true;
query.Connection := database;
query.Close ;
query.SQL.Add ('insert into alumno values ('''+nombre+''','+inttostr(edad)+','+inttostr(grado)+','''+maestra+''')');
try
query.ExecSQL ;
except on E: Exception do
showmessage ('error con la memoria :S')
end;
database.Connected := false;
end;

//// anteriormente los PChar los tenia como string, porque creia que ese era el error, pero no fue asi :(

delphi.com.ar 20-11-2003 21:07:49

No me gusta mucho esto... ¿Has intentado Debugear la DLL?... ¿Sabes como hacerlo?

xgerard 20-11-2003 21:13:57

nop =/

delphi.com.ar 20-11-2003 21:20:36

Para probar una dll, necesitas el programa que haga de "Host"... en este caso este programa es tu aplicación. Abre el proyecto de la DLL, en el menú Run\Parameters define en la casilla "Host Applications" el nombre de tu aplicación, a partir de ahí puedes empezar a debugear tu dll montándose en tu aplicación.
Normalmente lo que hago en estos casos es armar un Project Group donde esten incluídos los DPRs de la DLL y el host y esto hace mucho mas fácil la tarea.
Pruébalo, y coméntame que tal... ¿Ok?

xgerard 20-11-2003 21:22:32

ok mil gracias!!!

nos leemos en unas horas

saludos desde Mexico :D

xgerard 21-11-2003 00:03:37

siguiendo con lo mismo ... hay alguna forma de inicializar los objetos ADOConnection ?

:)

ya estuve tratando de hacer el debug, y simplemente al entrar a la funcion que esta en la segunda dll, la aplicacion causa error... claro que esto no sucede si la funcion es sin parametros .. .. .

asi que sigo en las mismas :confused:

delphi.com.ar 21-11-2003 00:26:27

Con BDE, recuerdo que se podía inicializar la base de datos en un proceso, y con pasarle el Handle del TDataBase a otro TDataBase, este compartía la conexión.

¿Oíste hablar de las DLLs de clases (BPLs)?.... posiblemente por ese lado encuentres una solución mucho mas sencilla.

Saludos!

xgerard 21-11-2003 01:45:39

sigo perdido :confused: estuve leyendo de las BPL y no logro entender ... :S

estoy probando usar una sola dll para hacer todo el trabajo, pero ahora el proyecto se bloquea en la primer linea que tiene que ver con el ADOConnection, ademas de que al compilarlo aparece un warning de que no se ha inicializado el objeto ADOConnection ...



... estoy a punto de lanzarme por la ventana :(

delphi.com.ar 21-11-2003 14:33:48

Fíjate si este hilo te puede ayudar en algo: http://www.clubdelphi.com/foros/show...=&threadid=897

Saludos!

xgerard 21-11-2003 23:37:02

pues resulta que ya hace lo que debe (usando 2 dlls :D ) ... todo era el problema de inicializar el ADOConnection y ADOquery ...

solo que ahora al salir del proyecto causa un error de memoria... este error no aparece si el 2o dll tiene funciones sin parametros ... hay alguna manera de "liberar" esa memoria del 2o dll?(suponiendo que ese es el problema :p )

saludos!:D

delphi.com.ar 22-11-2003 00:55:18

Cuando recibas el DLL_PROCESS_DETACH, o es muy común crear procedimientos propios para eso.
Código:

function OpenDatabase(AParam....): THandle; stdcall;
procedure CloseDatabase(ADatabase: THandle); stdcall;

Saludos!


La franja horaria es GMT +2. Ahora son las 17:55:55.

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