Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-11-2006
DISIMULA DISIMULA is offline
Registrado
 
Registrado: mar 2005
Posts: 6
Poder: 0
DISIMULA Va por buen camino
Red face Error al usar una dll que he creado

Bueno para empezar indicar que es la primera dll que creo para uso propio y por ser la primera pues empiezan los problemas.

indico la funcion que me da problemas de la dll es la siguiente.

Código Delphi [-]
Procedure ConectarAdo(ADOConnection1: TADOConnection; Nombre: String); stdcall; export;
Begin
  ADOConnection1.Connected:=False;
  ADOConnection1.ConnectionString:=
  'Provider=Microsoft.Jet.OLEDB.4.0;'+
  'Data Source='+ExtractFilePath(Application.ExeName)+Nombre+
  ';Persist Security Info=False';
  Try ADOConnection1.Connected:=True
  Except
  Begin
     Showmessage('No ha sido posible realizar la conexion');
  end;
  end;
end;

exports ConectarAdo


Ahora el codigo de llamada que uso en el ejemplo uso un form con un TADOConecction y la siguiente llamada:

Código Delphi [-]
var
  Form1: TForm1;
  Procedure ConectarAdo(ADOConnection1: TADOConnection; Nombre:    String); external 'info.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ConectarAdo(AdoC,'Ejemplo.mdb');
end;


Pues cuando pruebo me da una excepcion EAccessViolation in module info.dll at 001484FA

Alguien puede ayudarme seguro que es una tonteria pero es que no estoy muy puesto,

Gracias por todo.
Responder Con Cita
  #2  
Antiguo 29-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola DISIMULA
No se si me equivoco, pero veo algunas diferencias de sintaxis, podrian ser el problema, no se, pruebalo asi:
Código Delphi [-]
Procedure ConectarAdo(ADOConnection1: TADOConnection; Nombre: String); stdcall; export;
Begin
  ADOConnection1.Connected:=False;
  ADOConnection1.ConnectionString:=
  'Provider=Microsoft.Jet.OLEDB.4.0;'+
  'Data Source='+ExtractFilePath(Application.ExeName)+Nombre+';'+
  'Persist Security Info=False';
  Try ADOConnection1.Connected:=True
  Except
  Begin
     Showmessage('No ha sido posible realizar la conexion');
  end;
  end;
end;

exports ConectarAdo
y este otro:
Código Delphi [-]
var
  Form1: TForm1;
  Procedure ConectarAdo(ADOConnection1: TADOConnection; Nombre:    String); external 'info.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ConectarAdo(ADOConnection1,'Ejemplo.mdb');
end;
y si tiene clave la base de datos, por ejemplo: Clave admin
Código Delphi [-]
Procedure ConectarAdo(ADOConnection1: TADOConnection; Nombre: String); stdcall; export;
Begin
  ADOConnection1.Connected:=False;
  ADOConnection1.ConnectionString:=
  'Provider=Microsoft.Jet.OLEDB.4.0;'+
  'Data Source='+ExtractFilePath(Application.ExeName)+Nombre+';'+
  'Persist Security Info=False;'+
  'Jet OLEDB: Database Password=admin';
  Try ADOConnection1.Connected:=True
  Except
  Begin
     Showmessage('No ha sido posible realizar la conexion');
  end;
  end;
end;

exports ConectarAdo
Tal vez ayude en algo, aunque prefiero un archivo ini al que pueda cambiar la direccion de la base de datos, con un dll, queda solo en un sitio, ademas de tener que distribuir el dll, con el programa, bueno, es una opinion nada mas.
Saludos
Responder Con Cita
  #3  
Antiguo 02-12-2006
DISIMULA DISIMULA is offline
Registrado
 
Registrado: mar 2005
Posts: 6
Poder: 0
DISIMULA Va por buen camino
Gracias Caral acabo de probar y nada sigo con el mismo error, se ve que no es esa del todo la solución se os ocurre alguna otra cosa.

Posdata: no lo pongo en un ini por que es una dll con mas funciones relacionadas para despues usarlas en mis programas.

Gracias por responder.
Responder Con Cita
  #4  
Antiguo 02-12-2006
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
El problema que tienes radica en dos partes

La primera es que Cuando creas Dlls que serán utilizadas por diferentes lenguajes (lo menciono por tu sentencia StdCall), no podrás utilizar Tipos String, por lo que deberas usar Pchar, y despúes en el código de delphi cuando haces la declaración de la función debes agregarle por igual la sentencia StdCall.


Código Delphi [-]
Procedure ConectarAdo(ADOConnection1: TADOConnection; Nombre:    String); StdCall; external 'info.dll';

Suerte
Responder Con Cita
  #5  
Antiguo 02-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
También puede usar el tipo ShortSring. Tiene la limitante de 256 caracteres pero en muchos casos es más que suficiente y con la ventaja de no tener que ocuparnos del manejo de memoria como en el caso de los PChar.

// Saludo
Responder Con Cita
  #6  
Antiguo 03-12-2006
DISIMULA DISIMULA is offline
Registrado
 
Registrado: mar 2005
Posts: 6
Poder: 0
DISIMULA Va por buen camino
Pues dicho y hecho Poliburro tenias razón me faltaba el stdcall en la declaración de la función, ya funciono todo y como decia tambien Roman pues use el ShortString y todo ha ido sobre rueda.

Gracias a todos los que me habeis ayudado.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error Raro al Usar IBX's sobre Firebird 2.0 AGAG4 Firebird e Interbase 17 01-10-2008 20:29:39
saber si alias esta creado en el dbe Manuel Varios 2 13-10-2006 18:27:37
Con que prog. se ha creado el cd de club delphi? gaupasa Varios 8 01-07-2005 14:59:19
Saber si un formulario ya está creado o no. Tecnic2 OOP 2 27-09-2004 13:27:01
usar un programa ya creado para una nueva aplicacion fabriciof Varios 3 02-05-2004 20:50:31


La franja horaria es GMT +2. Ahora son las 00:14:26.


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