Tema: Form en DLL
Ver Mensaje Individual
  #11  
Antiguo 11-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
Me resulto un error curioso...
Como el la DLL tengo una serie de errores los cuales voy numerando:
Funcion dentro de la DLL:
Código Delphi [-]
function Mensajes ( I : Integer ) : string; stdcall;
  var
    S : string;
  begin
    case I of
      1000 : S := 'No se puede eliminar un USUARIO con registros';
      1001 : S := '¿Desea eliminar este USUARIO?';
      1002 : S := 'Verifique que los datos sean correctos, una vez agregado solo se podra'+#13+'modificar TIPO, ESTADO y CONTRASEÑA. ¿Desea continuar con este proceso?';
      1003 : S := 'Usted no esta autorizado para cambiar esta CONTRASEÑA';
      1004 : S := 'Usted no esta autorizado para ELIMINAR un USUARIO';
      1005 : S := 'Usted no esta autorizado para AGREGAR un USUARIO';
      1006 : S := 'Campo USUARIO se encuentra vacio';
      1007 : S := 'Campo NOMBRE se encuentra vacio';
      1008 : S := 'Campo CONTRASEÑA se encuentra vacio';
      1009 : S := 'Las CONTRASEÑAS no coinciden';
      1010 : S := 'Debe elegir el TIPO de USUARIO';
      1011 : S := 'Debe elegir el ESTADO del USUARIO';
    end;
    Result := S;
  end;
Al momento de comprobar el campo CONTRASEÑA y deliberadamente hago que no concidan las contraseñas me lanza sin ningun problema el error 1009, pero si vuelvo hacer que no coincidan me aparece un error:
Access violation at address 2115448E in module 'borlndmm.dll'. Write of address 216635C
Revisando paso a paso este error se lanza cuando debe aparecer de nuevo la ventana para confirmar la contraseña la cual esta en la DLL, cabe notar que si hago que concidan las contraseñas la ventana me aparece en mas de una ocasion sin inconvenientes, solo es cuando no coinciden. Que podria ser??

Código Delphi [-]
{ Este como codigo es el que me indicaste para la ventana en la DLL }
function PassModal(AHandle: THandle; S: String): Boolean; stdcall;
  begin
     Result := False;
     Application.Handle := AHandle;
     with TwPassOk.Create(Application) do  // en la segunda instancia de la ventana aqui da error
     try
       if ShowModal = mrOk then
         Result := S = pePass.Text;
     finally
       Free;
     end;
  end;

La parte donde la llama en el formulario principal es:
Código Delphi [-]
procedure TwMain.ClickStateChange(Sender: TObject);
const
  MiDll = 'CLDRes.dll';
var
  DllHandle : THandle;
       Error: function (I: Integer): string; stdcall;
     DlgForm: function (H : THandle; S: string): Boolean; stdcall;
       Passw: Boolean;
begin
...
@Error := GetProcAddress(DllHandle,'Mensajes');
@DlgForm := GetProcAddress(DllHandle,'PassModal');
...
if dsUser.State = dsInsert then
  if (Sender as TbsSkinButton).Name = 'btAdmPost' then
  begin
    if not dsUserPASS.IsNull then
    begin
      Passw   := DlgForm(Application.Handle, dsUserPASS.AsString);
      if not Passw then MessageDlg(Error(1009),mtError,[mbOK],0);
    end
  end;

Última edición por Jose Roman fecha: 11-08-2012 a las 00:34:58.
Responder Con Cita