Tema: Form en DLL
Ver Mensaje Individual
  #1  
Antiguo 10-08-2012
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 364
Reputación: 21
Jose Roman Va por buen camino
Gracias por responderme,

El formulario principal es donde se puede ingresar, modificar o eliminar los usuarios que van a utilizar el programa, si se va a ingresar un nuevo usuario o cambiar la CONTRASEÑA al momento de oprimir el boton POST aparecera una ventana (que esta en la DLL TwPassOk) donde solicita que se ingrese de nuevo la CONTRASEÑA, si esto es igual al campo CONTRASEÑA del formulario principal graba el nuevo usuario o la modificacion de la contraseña, en caso contrario aparece un mensaje donde me informa que las contraseñas no coinciden.

Ahora intento enviar el ModalResult del TwPassOk a una variable Pass de tipo Boolean:

Código Delphi [-]
library CLDRes;

uses
  SysUtils,
  Classes,
  bsSkinData,
  Forms,
  Controls,
  uPassOk in 'FORM\uPassOk.pas' {wPassOk};

{$R *.res}

var
  Pass : Boolean;

procedure DisplayModalForm(AHandle: THandle; S: String); stdcall;
  begin
     Application.Handle := AHandle;
     with TwPassOk.Create(Application) do
     try
       ShowModal;
       if ModalResult = mrOk then
         if S <> pePass.Text then
           Pass := False
         else
           Pass := True
       else
         Pass := False;
     finally
       Free;
     end;
  end;

  exports
    DisplayModalForm, Pass;
begin
end.

Todo funciona, la ventana me abre en ShowModal, pero no se como leer el valor asignado a esta variable (lo ensayo por ahora en un ShowMessage), me lanza un error (aqui muestro lo escrito en el formulario principal):

Código Delphi [-]

procedure TwMain.ClickStateChange(Sender: TObject);
var
  DllHandle : THandle;
     DlgForm: procedure (H : THandle; S: string);stdcall;
       Passw: Boolean;
begin
  with wDataModule do
    if dsUser.State = dsInsert then
      if (Sender as TbsSkinButton).Name = 'btAdmPost' then
      begin
        try
           DllHandle := LoadLibrary('CLDRes.dll');             
          @DlgForm := GetProcAddress(DllHandle,'DisplayModalForm');
            @Passw := GetProcAddress(DllHandle,'Pass');
          DlgForm(Application.Handle, dsUserPASS.AsString);
          ShowMessage(BoolToStr(Passw));          
        finally
          FreeLibrary(DllHandle);
        end;      
end;

Gracias de antemano tu ayuda, si me puedes explicar como utilizar el ShareMem o si se puede solucionar algo en este codigo fuente, me disculpas por tanta molestia pero no soy muy experto en esto.

Última edición por Jose Roman fecha: 10-08-2012 a las 17:54:14.
Responder Con Cita