Tema: Form en DLL
Ver Mensaje Individual
  #1  
Antiguo 09-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
Form en DLL

Hola a todos,
Estoy realizando un programa en el cual hay un campo CONTRASEÑA si el usuario graba los cambios aparecera una ventana (la cual esta incluida en la DLL) donde se solicita confirmar la contraseña, el programa verificara que ambas contraseñas sean iguales, esto lo confirma por medio de una funcion (incluida tambien en la DLL), el intento lo hice por medio de un PROCEDURE (para que apareciera la ventana y no hubo inconveniente) pero al realizarlo con una FUNCTION me genera un error:

Access violation at address 00000000. Read of address 00000000.

Alguien podriame decirme donde tengo el error??, adjunto el codigo fuente:
  • Codigo fuente DLL

Código Delphi [-]

library CLDRes;  
uses   
SysUtils,   
Classes,   
bsSkinData,   
Forms,   
Controls,   
uPassOk in 'FORM\uPassOk.pas' {wPassOk};  
{$R *.res}  
function ConfirmPass(S: string; H: THandle): Boolean; stdcall; 
begin     
Application.Handle := H;     
with TwPassOk.Create(Application) do     
  try       
    ShowModal;       
    if ModalResult = mrOk then         
      if S = '' then  Result := False 
      else           
        if S <> pePass.Text then 
         Result := False 
        else             
         Result := True       
       else         
        Result := False;     
  finally       
    Free;     
  end; 
end;  

exports     Mensajes, ConfirmPass;  
begin 
end.
  • Codigo Fuente del programa

Código Delphi [-]
procedure TwMain.ClickStateChange(Sender: TObject); 
var   
  DllHandle : THandle;    
  Error : function (I: Integer): String; stdcall;   
  DlgForm: function (S: string; H: THandle): Boolean; stdcall; 
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,'ConfirmPass');           
         if DlgForm(dbeAdmPass.Text,Application.Handle) = True then             
           ShowMessage('Si') else ShowMessage('no');         
      finally           
        FreeLibrary(DllHandle);         
      end;       
    end; 
end;

Agradesco de antemano la colaboracion brindada.

Última edición por Neftali [Germán.Estévez] fecha: 09-08-2012 a las 17:39:59. Razón: Corregir los TAG's
Responder Con Cita