Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Convertir aplicación en dll

Hola amigos.
Estoy tratando de convertir una aplicación en dll pero no logro hacer que funcione desde una aplicación que la carga en forma dnámica. Esta aplicación cuenta con varios forms, accesos a BBDD y archivos planos. No tengo idéa de como hacerla funcionar.
Necesito que sea dll para luego poder incorporarla como plugin.
Uso Delphi 7.
Gracias por cualquier ayuda.
Responder Con Cita
  #2  
Antiguo 23-11-2015
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.233
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 jars Ver Mensaje
...pero no logro hacer que funcione desde una aplicación que la carga en forma dnámica.
El problema es que, eso es muy poca información para saber qué puede estar pasando.
¿Algún error? ¿Qué tipo de error?
¿Cómo estás intentando cargar tu aplicación (DLL)?
¿Has ejecutado paso a paso?
¿En qué momento falla o hace lo que no debe?
...
__________________
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 23-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Hola Neftali.
La dll lacargo asi:
Código Delphi [-]
H := LoadLibrary('D:\Dev\Delphi\Special_Projects\TmApp.DLL');
Pero luego de eso no se que debo hacer.
Quisiera que el form principal de la dll se ubique en el panel de la aplicación que la invoca.
Me falta algun ejemplo de como hacerlo.
Responder Con Cita
  #4  
Antiguo 23-11-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Depende de la aplicación que la invoca. Supongo que habrá algún manual que diga cómo deben ser las DLL que usa.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 23-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
No, la aplicación la estoy empezando a desarrollar yo.
Responder Con Cita
  #6  
Antiguo 23-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Pregunto, tengo que exportar el FormCreate de la dll???
Responder Con Cita
  #7  
Antiguo 23-11-2015
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Tienes que definir el API tú mismo: Qué funciones y procedimientos publicar, qué pretende hacer con cada uno, etc.

Como te veo muy perdido, deberías empezar leyendo la documentación acerca de cómo crear una DLL y utilizarla.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #8  
Antiguo 23-11-2015
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.233
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
Si no lo has hecho ya, échale un vistazo a esta entrada en mi blog.

Ahí se explican varias opciones, entre ellas, la que tú estás intentando aplicar a tu aplicación. en tu caso, la que está etiquetada como:
"EXE + DLL con Carga dinámica(El EXE puede ser con o sin BWRP)"

Al final tienes los ejemplos con código fuente para que puedas probar.

el que se aplica en tu caso, sería algo así:

Código Delphi [-]
  // Cargar la DLL
  H := LoadLibrary('SUMAS.DLL');
  // Cargada correctamente?
  if (H >= 32) then begin
    MessageDlg('Cargada la DLL...', mtInformation, [mbOK], 0);
    sum := nil;
    @sum := GetProcAddress(H, 'Sumar2');
    // Asignada?
    if Assigned(sum) then begin
      MessageDlg('Acceso a la función SUMAR', mtInformation, [mbOK], 0);
      // llamada
      res := Sum(4,5);
      MessageDlg(Format('Resultado:  %d+%d=%d',[4,5,res]), mtInformation, [mbOK], 0);
      FreeLibrary(H);
    end;
    else begin
      MessageDlg('Error, no se ha encontrado el método SUMAS2', mtError, [mbOk], 0) 
    end;
  end
  else
    MessageDlg('Error, no se ha encontrado SUMAR.DLL', mtError, [mbOk], 0)
 end.

Las definiciones serían estas:

Código Delphi [-]
var
  H: Thandle;
  res:integer;
  Sum: function(x,y:Integer):integer; stdcall;

En este caso la DLL SUMAS.DLL sería la que tú estás programando y el método Sumar2, el equivalente al que deberías programar tú para que se muestre el formulario que quieres.
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 23-11-2015 a las 19:19:16. Razón: Añadir las definiciones
Responder Con Cita
  #9  
Antiguo 23-11-2015
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.233
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
Al final de esa entrada, tienes algunos links a otras, sobre cómo trabajar con plugins.
__________________
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
  #10  
Antiguo 23-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Neftali, ya había leído tu artículo y he trabajado con dll´s que exportaban algunas funciones.
Lo distinto aca es que es una aplicación que ya está funcionando como .exe y necesito poder ejecutarla desde una app.
Esta app tiene el formcreate y formshow donde hago inicializaciones y lectura de un par de ini´s. No se si tengo que exportar el formcreate y formshow ó que hacer para que la misma arranque dentro de la nueva app que la instancia.
Responder Con Cita
  #11  
Antiguo 24-11-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para hacer eso, la dll no debe tener el formato de una aplicación, sino un formulario. Puedes tener los formularios que quieras. Te pongo un ejemplo:

La dll:
Código Delphi [-]
library Formdll;

uses
  SysUtils, Windows,
  Classes,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

// Creas tu formulario principal y lo destruyes al salir...
procedure Init;
var
   Form1: TForm1;
begin
   Form1:= TForm1.Create(nil);
   Form1.ShowModal();
   Form1.free;
end;

begin
 Init;
end.

En la aplicación que ejecuta la dll:
Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
  Dll: String;
begin
  // Suponiendo que la dll esta en la ruta de este ejecutable...
  Dll:= ExtractFilePath(ParamStr(0)) + 'Formdll.dll';
  LoadLibrary(PCHAR(Dll));
end;

Saludos.
Responder Con Cita
  #12  
Antiguo 24-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Gracias Escafandra.
Ahora todos los formularios comparten un DataModule con distintos objetos de BBDD, de que mopdo se pueden compartir.
Lo mismo sucede con variables publicas que se encuentran en el formulario principal.
Gracias
Responder Con Cita
  #13  
Antiguo 24-11-2015
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Gracias a sus aportes voy progresando.
Ya entendi el mecanismo y pude acceder a los distintos forms.
La cosa ahora es como puedo hacer para que desde la app host, le indique a cada form de la dll que se muestre dentro de un TPanel que funciona como contenedor, para que se muestren dentro de el (owner).
Espero me hallan entendido.
Gracias
Responder Con Cita
  #14  
Antiguo 24-11-2015
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.233
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
Dirá que eso se puede hacer de forma similar a como se hace con los forms "normales" (sin que estén en una DLL), utilizando el Parent del form que estás abriendo.

Revisa estos hilos:
Form dentro de otro
Se puede colocar un form dentro de un TPanel
Form contenedor dentro de otro
__________________
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
convertir mi aplicacion en un servicio ingabraham Varios 1 24-09-2013 05:11:07
Error al convertir una aplicación D6 a DXE2 jafera Varios 0 26-05-2012 20:20:39
Convertir aplicacion Delphi en Web Luis Cuenca .NET 2 20-04-2009 09:56:41
Convertir Aplicacion en Activa bohemioloco API de Windows 3 25-04-2007 23:25:29
como convertir mi aplicacion cliente - servidor difesa Conexión con bases de datos 0 20-11-2006 23:08:03


La franja horaria es GMT +2. Ahora son las 14:37:58.


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