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 27-06-2012
mweltmeister mweltmeister is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
mweltmeister Va por buen camino
Creo que no me expliqué adecuadamente o no te entendí, pero hice lo que me dijiste y el error al compilar fue el siguiente: "[DCC Fatal Error] sumas.dpr(8): F1026 File not found: 'Dialogs.dcu'"

Código:
Código:
library sumas;


uses
  ShareMem,
  Dialogs,
  SysUtils,
  Classes;

{$R *.res}


function Sumar(x,y:integer):Integer; stdcall; overload;
begin
  ShowMessage (Format('1-Sumando %d+%d=%d',[x,y,(x+y)]));
  Result := x+y;
end;

function Sumar2(x,y:integer):Integer; stdcall; overload;
begin
  ShowMessage (Format('2-Sumando %d+%d=%d',[x,y,(x+y)]));
  Result := x+y;
end;


exports Sumar(x,y:integer);
exports Sumar2(x,y:integer);

end.
El error se marca en rojo en:
Código:
Classes;
Responder Con Cita
  #2  
Antiguo 27-06-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por mweltmeister Ver Mensaje
Creo que no me expliqué adecuadamente o no te entendí, pero hice lo que me dijiste y el error al compilar fue el siguiente: "[DCC Fatal Error] sumas.dpr(8): F1026 File not found: 'Dialogs.dcu'"
Perdón.
Tienes TODA la razón.

Al trabajar con Delphi XE2 hay que cambiar referencias a algunas units.
Cambia Dialogs por VCL.Dialogs y prueba.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 27-06-2012
mweltmeister mweltmeister is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
mweltmeister Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Perdón.
Tienes TODA la razón.

Al trabajar con Delphi XE2 hay que cambiar referencias a algunas units.
Cambia Dialogs por VCL.Dialogs y prueba.
Ya me funcionó la compilación, ya lo tengo compilado y ya puedo llamar al .dll; El problema es que no funciona!!

Supongo que es por un error donde dice "var
Use: function(x,y:Integer):integer; stdcall;"
Ya que la función no es esa, la función que quiero utilizar es "StartHook" o algo que la ejecute.

¿Alguna otra idea?
Código:
program Call_suma_dinam;

uses
  Sharemem,
  SysUtils,
  Classes,
  Windows,
  VCL.Dialogs;

{$R *.res}

var
  H: Thandle;
  res:integer;
  Use: function(x,y:Integer):integer; stdcall;
begin

  if (MessageBox(0, '¿Desea cargar la DLL?', '', MB_ICONQUESTION or MB_YESNO) = idNo) then begin
    Exit;
  end;

  H := LoadLibrary('Project1.dll');
  // Cargada correctamente?
  if (H >= 32) then begin
    MessageDlg('Cargada la DLL...', mtInformation, [mbOK], 0);
    sum := nil;
    @sum := GetProcAddress(H, 'StartHook');
    // Asignada?
    if Assigned(sum) then begin
      MessageDlg('Acceso a la función StartHook', mtInformation, [mbOK], 0);
      // llamada
      res := Sum(Starthook);

      MessageDlg(Format('Resultado:  %d+%d=%d',[4,5,res]), mtInformation, [mbOK], 0);
      FreeLibrary(H);
    end;
  end
  else
    MessageDlg('Error, no se ha encontrado SUMAR.DLL', mtError, [mbOk], 0)
 end.
end.
Responder Con Cita
  #4  
Antiguo 27-06-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿Estas utilizando un Win32 o un Win64?.

Suponiendo que importas bien la función StartHook y que su declaración es correcta, si ese Hook que realiza la dll que quieres usar requiere su inyección en procesos de 64 bits, dicha inyección no se va a realizar. Un proceso compilado para 64 bits no puede cargar una dll compilada para 32 bits.


Saludos.
Responder Con Cita
  #5  
Antiguo 27-06-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Exactamente qué cabecera tienen esas funciones?
¿Cómo están definidas?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 27-06-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Wink

Prueba con algo así y te debería funcionar:;

Código Delphi [-]
var
  H: Thandle;
  res:integer;
  proc: procedure();stdcall;
begin
  H := LoadLibrary('Project1.dll');
  // Cargada correctamente?
  if (H >= 32) then begin
    MessageDlg('Cargada la DLL...', mtInformation, [mbOK], 0);
    proc := nil;
    @proc := GetProcAddress(H, 'StartHook');
    // Asignada?
    if Assigned(proc) then begin
      MessageDlg('Acceso a la función StartHook', mtInformation, [mbOK], 0);
      // llamada
      proc();
      MessageDlg('Se ha ejecutadoStartHook', mtInformation, [mbOK], 0);
      // Liberar
      FreeLibrary(H);
    end;
  end
  else
    MessageDlg('Error, no se ha encontrado Project1.DLL', mtError, [mbOk], 0)
 end.
end.

Para comprobarlo pon un dialog dentro del procedimiento y verás si se ejecuta.
Aquí he supuesto que la cabecera de la función coincide con esta:

Código Delphi [-]
proc: procedure();stdcall;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 27-06-2012
mweltmeister mweltmeister is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
mweltmeister Va por buen camino
Ahí compiló perfectamente, pero ahora el .exe por más que me diga que llama al .dll aparentemente no lo hace!.
Eliminé el .dll de todos lados y aún así dice haberlo encontrado y acceder a su función.

Y si los ejecuto juntos, aparentemente también dice acceder a su función aunque no haga nada de lo que debería hacer (el .dll)

¿Alguna idea? Me estoy volviendo loco con esto...
Gracias!
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
¿Cómo crear el ejecutable y un installshield en delphi 2010? Master23 OOP 2 08-03-2010 12:03:02
como crear un ejecutable? fasthorse C++ Builder 7 22-01-2007 12:41:24
¿cómo crear un fichero ejecutable en otro ordenador? elcaracas C++ Builder 2 01-11-2006 04:32:19
¿cómo crear un archivo ejecutable para aplicaciones en java? rls JAVA 11 12-07-2006 17:42:39
Como libero una forma que llame con un show jaaron OOP 6 09-06-2005 19:39:52


La franja horaria es GMT +2. Ahora son las 05:14:51.


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