![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
¡Pude abrir uno de los proyectos!
Estoy intentando modificar el código para que me funcione con el .dll pero me da un error al querer compilarlo. El código que intento compilar es el siguiente; ¿Alguna idea? Código:
program Call_suma_estat;
uses
Forms,
Dialogs,
SysUtils;
var
Res:Integer;
function StartHook(x,y:integer):Integer; stdcall; external 'project1.dll';
begin
// llamada
Res := StartHook;
MessageDlg('Iniciando programa.....', mtInformation, [mbOK], 0);
end.
|
|
#2
|
||||
|
||||
|
Deberías poner el mensaje del error
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
|||
|
|||
|
Perdón, se me olvidó. No estoy seguro de cual fue el mensaje del error, pero marcaba en rojo el codigo "Res= 0".
Intenté editarlo a mi manera para que funcionara con el comando que yo quiero y pude compilarlo; El problema es que el .dll no funciona!. Lo único que hace el .exe al ser ejecutado es mostrar una ventana que dice "Iniciando programa" (como el código muestra). Adjunto nuevamente el código que pude compilar: Código:
program start;
uses
Forms,
Dialogs,
SysUtils;
var
Res:Integer;
function StartHook(x,y:integer):Integer; stdcall; external 'project1.dll';
begin
// llamada
Res := 0;
MessageDlg('Iniciando programa.....', mtInformation, [mbOK], 0);
end.
Gracias! |
|
#4
|
||||
|
||||
|
No debería haber problema con la versión.
(1) Abre el proyecto de sumas (dpk o dproj) y compílalo => Eso debería generar una DLL en el directorio. (si te da algún error dí cual) (2) Cierra el proyecto anterior y abre el proyecto Call_suma_estat (dpk o dproj) y compílalo => Eso debería generar un EXE en el directorio. (si te da algún error dí cual) Esperamos que nos digas que tal...
__________________
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. |
|
#5
|
|||
|
|||
|
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.
Código:
Classes; |
|
#6
|
||||
|
||||
|
Cita:
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. |
|
#7
|
|||
|
|||
|
Cita:
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.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|