Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
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

Última edición por xgerard fecha: 20-11-2003 a las 20:36:07.
Responder Con Cita
  #2  
Antiguo 20-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
¿Cómo es que estas pasando estos parámetros?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 20-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 20-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
No me gusta mucho esto... ¿Has intentado Debugear la DLL?... ¿Sabes como hacerlo?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 20-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
nop =/
Responder Con Cita
  #6  
Antiguo 20-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 20-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
Post

ok mil gracias!!!

nos leemos en unas horas

saludos desde Mexico
Responder Con Cita
  #8  
Antiguo 21-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
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

Última edición por xgerard fecha: 21-11-2003 a las 00:05:39.
Responder Con Cita
  #9  
Antiguo 21-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #10  
Antiguo 21-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
sigo perdido 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
Responder Con Cita
  #11  
Antiguo 21-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Fíjate si este hilo te puede ayudar en algo: http://www.clubdelphi.com/foros/show...=&threadid=897

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #12  
Antiguo 21-11-2003
xgerard xgerard is offline
Miembro
 
Registrado: nov 2003
Ubicación: Veracruz, Mexico
Posts: 10
Poder: 0
xgerard Va por buen camino
Cool

pues resulta que ya hace lo que debe (usando 2 dlls ) ... 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 )

saludos!
Responder Con Cita
  #13  
Antiguo 22-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:00:45.


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
Copyright 1996-2007 Club Delphi