Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Evitar errores en BlockInput (https://www.clubdelphi.com/foros/showthread.php?t=89827)

Ramsay 13-02-2016 16:06:29

Evitar errores en BlockInput
 
Hola ,estoy haciendo una funcion para bloquear el teclado , en algunos ejemplos se usa una funcion para verificar que blockinput existe en el user32.dll , queria saber si uso try y except puedo evitar que se muestren errores en caso de que la funcion no existe.

Código Delphi [-]
function BlockInput(fBlockInput: Boolean): DWORD; stdcall; external 'user32.DLL';

procedure TForm1.btnTestClick(Sender: TObject);
begin
try
  begin
    BlockInput(True);
  end
except
  begin
    //
  end;
end;

¿ Si esta funcion no existe mostraria un error de todas formas al sistema ?

AgustinOrtu 13-02-2016 17:22:07

No, ya que estas "comiendo" u ocultando la excepcion dentro del bloque except; en ingles esto se conoce como "trap exceptions"

De todas formas, tene cuidado porque ahi estas comiendo todas las excepciones; lo mas indicado en tu caso seria evaluar el tipo de excepcion que se genera y solamente ocultar la de la falta del user32.dll

roman 15-02-2016 18:55:56

Cita:

Empezado por Ramsay (Mensaje 502062)
¿ Si esta funcion no existe mostraria un error de todas formas al sistema ?

No mostraría nada, pero no por el bloque try-except sino porque tu aplicación ni siquiera se ejecutaría. La manera en que importas la función (static loading) requiere que la función exista al momento de iniciar la aplicación y, de no ser así, el S.O aborta la carga de la aplicación con un mensaje de error que no puedes interceptar.

Para poder verificar la existencia de la función en tiempo de ejecución debes usar una carga dinámica de la función, usando LoadLibrary y GetProcAddress, de la API de Windows.

También, según leo, en las versiones recientes de Delphi existe la directiva delayed, que agregarías a la declaración de la función:

Código Delphi [-]
function BlockInput(fBlockInput: Boolean): DWORD; stdcall; external 'user32.DLL' delayed;

con lo cual podrías verificar la existencia de la función antes de usarla por primera vez.

// Saludos


La franja horaria es GMT +2. Ahora son las 23:46:55.

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