Club Delphi  
    Paypal   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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-03-2011
delphijm delphijm is offline
Miembro
 
Registrado: abr 2008
Posts: 47
Poder: 0
delphijm Va por buen camino
Hola a todos,

Si, Delfino, he pensado en hacerlo usando DLL, de hecho lo estoy implementando asi y parece que podre obtener lo que pretendo... Me explico y asi respondo tambien la cuestion de Neftali:

La razon para hacerlo en dos formularios diferentes es que me interesa disponer del siguiente escenario:

- La aplicacion es cliente-servidor usando DataSnap via HTTP...
- En la parte del cliente se ejecutara un EXE que solamente pedira el usuario y el password y comunicara con el servidor para validarlo...
- Tambien en la parte del cliente existira una DLL que "encapsula" toda la aplicacion (formulario principal y todos los formularios etc)...
- Si la validacion que realiza el EXE es correcta, se ejecutara la procedure de la DLL que abre el formulario principal de la aplicacion, si la validacion no es correcta nunca llegara a ejecutarse esta llamada dando un mensaje de "Usuario o password incorrectos, vuelva a intentarlo, etc..."...
- El EXE que pide el usuario y password, ademas de conectarse con el servidor para validarse, tambien solicitara al servidor si existe una version mas actualizada de la DLL (que encapsula toda la aplicacion) y, si es asi, bajara del servidor la nueva DLL hacia el cliente para actualizar la aplicacion...
- Y esto ultimo es el motivo por el que me interesa que el programa EXE de validacion sea diferente de la DLL que encapsula toda la aplicacion, porque si fuera el mismo no podria sustituir el archivo que esta siendo ejecutado, en cambio con este sistema lo que sustituyo es la DLL que aun no se esta ejecutando... No se si me explico...

Ahora estoy con el tema del EXE ejecutando la procedure de la DLL que ejecuta la aplicacion y parece que funciona bien... Despues tendre que pelearme con el tema de como bajar la DLL del servidor si debe de actualizarse, aun no se como hacerlo pero indagare...

Por lo que se refiere a la privacidad del usuario y contraseña pienso que es una buena opcion ya que tanto el dato de "usuario" y "password" se trasladan desde el EXE de los inputs a la DLL de la aplicacion "internamente" como parametros de una procedure...

En principio, cuando la aplicacion ya se esta ejecutando despues de la validacion, no necesito comunicarme con el primer EXE, asi que lo que hago es un "Hide" antes de llamar a la procedure de ejecucion de la aplicacion para ocultarlo i listos...

Un saludo y gracias a todos...

Josep Mª
Responder Con Cita
  #2  
Antiguo 02-05-2011
delphijm delphijm is offline
Miembro
 
Registrado: abr 2008
Posts: 47
Poder: 0
delphijm Va por buen camino
Hola a todos,

De vuelta con el mismo tema...

Como comente en el ultimo mensaje, finalmente opte por crear una DLL en la que tenia una sola procedure que se encarga de ejecutar la aplicacion...

Desde un EXE diferente, declaro la DLL i en el evento del boton "Acceder", ejecuto la procedure de la DLL que me arranca la aplicacion (le paso como parametros, el usuario, etc...)...

Todo funciona perfecto hasta que, desde el formulario principal cierro la aplicacion... Entonces la procedure de la DLL finaliza, se devuelve el flujo al EXE i este, al cerrarse lanza un error de "Acces violation"...

Lo curioso es que el error solo lo da cuando lo ejecuto desde RAD Studio, si lo ejecuto desde Windows XP no da el error, en cambio si lo ejecuto desde Windows 2008 Server tambien da el error...

Por si podeis ayudarme aqui esta el codigo de la DLL y del EXE:

-
Código Delphi [-]

//---------------------------------------------
// DLL con la procedure que arranca la aplicacion
//----------------------------------------------
library logistica_app;

uses
  SysUtils,
  Classes,
  Forms,
  uUserData in '..\Cliente\uUserData.pas',
// Aqui el resto de units del proyecto ...

// Esta es la procedure que arranca la aplicacion...
procedure execAPP(user: String);
var
  oldHandle: THandle;
  begin
    global_usuario:=user;

    Application.Initialize;
    Application.Title := 'Gestion Logistica '+' ['+global_usuario+']';
    Application.CreateForm(TstylersDM, stylersDM);
    Application.CreateForm(TserverfuncDM, serverfuncDM);
    Application.CreateForm(TmensajesDM, mensajesDM);
    Application.CreateForm(TimagenesDM, imagenesDM);

// Este es el formulario principal... Para salir de el hago "close"
    Application.CreateForm(TfrmPrincipal, frmPrincipal);
    Application.Run;

  end;


exports
  execAPP;

{$R *.res}

begin


end.

El codigo del EXE es este (resumiendo):

Código Delphi [-]

unit fINICIO;

interface

uses
    Windows, Messages, ....

type
   TfrmInicio = class(TForm)
// Aqui los paneles, los edits, botones, etc...
   private
      ...
   public

   end;

  // AQUI la declaracion de la procedure que arranca la aplicacion dentro de la DLL

var
  procedure execAPP(user: String); stdcall external 'logistica_app.dll';

implementation

// ... Aqui funciones varias de gestion de eventos
//...


// Aqui donde se llama a la procedure de la DLL.

procedure TfrmInicio.IniciarAplicacion(user: String);
begin
  Hide;    // Hide de este formulario para que al arrancar la aplicacion
             // este formulario se esconda.


  execAPP(user, appHandle);  // Ejecutamos la aplicacion. Hasta aqui todo bien

  // Una vez salimos de la aplicacion que se ha ejecutado desde la DLL
  // hacemos un close de este formulario para acabar definitivamente.

  // Y ES AQUI DONDE ME APARECE EL ERROR.
  // Aunque comente el "close" el error aparece cuando cierro el formulario
  // manualmente.
  Close;
end;

Parece como si el "objeto" Application del EXE ya no exista al volver de la DLL... Pero parece que deberian ser diferentes...

No se, si alguien puede ayudarme se lo agradecere...

Un saludo

Josep Mª
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
Es posible ejecutar mi aplicacion desde otro programa ? gaston260 API de Windows 5 15-03-2011 00:15:30
ejecutar otro programa php srangel PHP 3 01-04-2005 17:11:27
ejecutar un programa dentro de otro migueilichenco Varios 1 28-11-2003 20:39:03
Ejecutar un programa DENTRO de otro programa seduerey Varios 8 12-11-2003 13:56:20
Ejecutar algo despues de WinExec u otro Tonio Varios 1 03-09-2003 15:46:23


La franja horaria es GMT +2. Ahora son las 22:51:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi