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 26-01-2007
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Fallo en dll

Hola, tengo un fallo ... el caso es que no lo veo ... a ver si desde su perspectiva me lo encuentran ....

Una dll

Código Delphi [-]
library FormDLL;
uses
  sharemem,SysUtils,
  Classes,dialogs,
  UfrmPrincipal in 'UfrmPrincipal.pas' {frmPrincipal};
{$R *.res}
// Para mostrar el formulario "frmPrincipal".
//
function MostrarFormulario : boolean; stdcall;
begin
  Result := true;
  frmPrincipal := TfrmPrincipal.Create(nil);
  try
    frmPrincipal.ShowModal;
  finally
    frmPrincipal.Free;
  end;
end;
function suma(x,y:integer):integer;stdcall;
begin
  suma := x+y;
end;
function muestrasaludo:boolean;stdcall;
begin
 Result := true;
 showmessage('Hola');
end;
exports
  MostrarFormulario,suma,muestrasaludo; // Exportamos la función.
end.

y un exe que la llama

Código Delphi [-]
unit UfrmPrueba;
interface
uses
  sharemem,Windows, Forms, Classes, Controls, StdCtrls,dialogs,sysutils;
type
  TfrmPrueba = class(TForm)
    btnFormulario: TButton;
    Button1: TButton;
    Button2: TButton;
    procedure btnFormularioClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;
var
  frmPrueba: TfrmPrueba;
// Declaración de la función sita en la "DLL"
function MostrarFormulario : boolean; external 'FormDLL.dll' name 'MostrarFormulario';
function suma(x,y:integer): integer;external 'FormDLL.dll'  name 'suma';
function muestrasaludo:boolean;external 'FormDLL.dll' name 'muestrasaludo';
implementation
{$R *.dfm}
procedure TfrmPrueba.btnFormularioClick(Sender: TObject);
begin
  MostrarFormulario; // Usamos la función externa
end;
procedure TfrmPrueba.Button1Click(Sender: TObject);
var
resultado: integer;
begin
resultado := suma(3,4);
showmessage (inttostr(resultado));
end;
procedure TfrmPrueba.Button2Click(Sender: TObject);
begin
muestrasaludo;
end;
end.

la unica funcion que no me funciona es la de la suma ... la mas facil

Gracias por adelantado
Responder Con Cita
  #2  
Antiguo 26-01-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
En la dll veo que declaras las funciones con la directiva stdcall, entonces porque cuando las importas no utilizas la misma directiva

Código Delphi [-]
function MostrarFormulario : boolean; stdcall; external 'FormDLL.dll' name 'MostrarFormulario';
function suma(x,y:integer): integer;  stdcall; external 'FormDLL.dll'  name 'suma';
function muestrasaludo:boolean;  stdcall; external 'FormDLL.dll' name 'muestrasaludo';

Te preguntaras por que solo la suma parecía funcionar mal, pues es debido a que la directiva stdcall solo indica como se deben de pasar los parámetros a la función, así que como suma es la única de las funciones con parámetros es la única que parecía funcionar mal.
Responder Con Cita
  #3  
Antiguo 26-01-2007
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
puuuuuuuuuufff que paketeeee!!!

ya ves .... ke fallo mas tontooooooo!!! si es q 18 ojos ven mas que dos.

Muchas gracias ... y un saludo.
Responder Con Cita
  #4  
Antiguo 26-01-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
A mi no me funciona

Hola muchachos...

Estuve probando el código de Uds. y después de cerrar la aplicación se produce una excepción inesperada . Si lo corro al sistema desde Delphi, la excepción es:

Project PruebaDll raised exception class EInvalidPointer with message invalid pointer operation...

Y, si lo corro desde el Explorador de archivos también, y dice:

Se ha producido una excepción inesperada del programa en la dirección tal...

Yo lo que hice fueron dos proyectos. Un proyecto para la Dll e incluí el formulario frmPrincipal; y el otro, para el ejecutable que llamé PruebaDll.
¿Qué pude haber hecho mal?

Gracias...

Última edición por PabloTech fecha: 26-01-2007 a las 14:16:39. Razón: Mi mala interpretación de las etiquetas de texto...
Responder Con Cita
  #5  
Antiguo 26-01-2007
mierda mierda is offline
Miembro
 
Registrado: may 2006
Posts: 129
Poder: 18
mierda Va por buen camino
Si .... tienes que quitar del uses el sharemem

Hola nen, yo tambien me di cuenta y es que hay que quitar el sharemem de la clausula uses ....

ya que creo que eso solo hay que ponerlo en la dll si esta va a ser usada por otro lenguaje de programacion ... sino es asi ... corregirme.

Un saludo!!

PD: en la dll tienes que crear un form tambien .... si quieres ver el ejemplo completo.
Responder Con Cita
  #6  
Antiguo 26-01-2007
Avatar de PabloTech
PabloTech PabloTech is offline
Miembro
 
Registrado: ene 2007
Ubicación: Tucumán, Argentina
Posts: 82
Poder: 18
PabloTech Va por buen camino
Talking Agradesimiento

Cita:
Estas en los cierto Lucas
… Digo, tienes razón acerca de quitar el
sharemem de la aplicación.

Ahora, ¿dónde podremos encontrar otros trucos sobre las dlls? ¿Tu sabes?
Posdata: Yo estoy programando en Delphi 6

Última edición por PabloTech fecha: 26-01-2007 a las 22:43:29.
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
Detectar fallo en sp remoto Ricardosml MS SQL Server 2 02-11-2006 00:03:51
¿ Fallo en MySQL ? against SQL 7 27-09-2006 13:37:33
FALLO en CAERQUES Lepe Varios 2 06-04-2005 14:09:49
Fallo de seguridad en el TCP DarkByte Noticias 4 28-04-2004 23:17:26
Fallo con la ñ en delphi 8 elpinjum Varios 1 27-02-2004 03:17:28


La franja horaria es GMT +2. Ahora son las 06:51:39.


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