Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Post Como evito error cuando no esta una Dll??

Buenos Dias:
Les consulto a ver si existe una solucion a este tema... tengo un programa en el cual invoco una dll. de la siguiente manera
Código Delphi [-]
function Ejecutaaccion ; external 'MIDLL.DLL' index 1;

Imaginemos que la dll se borro por "arte de magia" ... entonces cuando ejecuto el programa me dice
No se encuentra la biblioteca de vinculos dinamicos.. blablabla...
O sea me dice que falta la dll... el tema es asi... no hay manera de que cuando pasa esto se pueda generar una excepcion o algo... quiero que el programa funcione ...

Ademas.. en mi ejecutable tengo la dll dispuesta a copiarse al directorio, pero evidentemente primero busca las dll's antes de hacer cualquier cosa...

No se que puedo hacer para que me deje copiarla (eso esta resuelto) ,, o sea que las invocaciones se hagan mas tarde..
emmm espero que me entiendan...

Gracias!!!
Responder Con Cita
  #2  
Antiguo 02-12-2005
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.234
Poder: 20
ElKurgan Va camino a la fama
La culpa la tiene el enlace estatico en el ejecutable: Intenta cargar el enlace a la DLL antes de que empiece ninguna linea de codigo. La solucion pasa por llamar a las dll mediante enlaces dinamicos, aunque esto tiene el inconveniente de que si tienes muchas llamadas a la funcion tendrias que modificar mucho codigo.

Aunque tambien puedes solucionarlo lanzando un pequeño programa cargador antes de que se ejecute el tuyo propio, que intente copiar la dll y si no puede es que existe o esta en ejecucion en memoria.

Un saludo
Responder Con Cita
  #3  
Antiguo 02-12-2005
Avatar de marceloalegre
[marceloalegre] marceloalegre is offline
Miembro Premium
 
Registrado: abr 2005
Ubicación: Mar del Plata - Argentina
Posts: 448
Poder: 20
marceloalegre Va por buen camino
Thumbs down

estuve mirando el tema, siempre cargue las dll estaticamente...

estuve mirando el comando loadlibrary y cambie la declaracion.. pero no me anda... alguien puede postear un ejemplo claro de carga dinamica? porque llamo la dll es un procedure y no me da ni la hora... o sea no funciona...
Responder Con Cita
  #4  
Antiguo 03-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Esto podría ser al menos una forma de llamar a una función situada en una librería realizando la carga de estas dinámicamente, como dicen que se dice. Es muy posible que no sea la única forma de hacerlo. Se trata, en este caso, de cargar la función "ShowCursor" que se encuentra en la librería "user32.dll".

Código Delphi [-]
procedure MostrarCursor(mostrar: boolean);
type
  TShowCursorProc = function(bShow: BOOL) : HResult; stdcall;
var
  HandleDll: THandle;
  FuncionDll: TShowCursorProc;
begin
  HandleDll := LoadLibrary('user32.dll');
  if (HandleDll <> 0) then // Se cargó la librería
  begin
    @FuncionDll := GetProcAddress(HandleDll, 'ShowCursor');
    if (@FuncionDll <> nil) then // Tenemos la función
    begin
      FuncionDll(mostrar); // Podemos utilizarla, pues
    end;
    FreeLibrary(HandleDll);
  end;
end;
Alguna vez he enlazado aquí a cierto artículo de Néstor Freire titulado "Cómo crear y utilizar las librerías en nuestros programas".

De todas formas Víctor, se me ocurre que hagas lo que te han sugerido, que me parece que podría funcionar, si es que no hay algún inconveniente en hacer algo como lo siguiente: que lo primero de todo en tu programa sea extraer la "DLL" que lleva incorporada y copiarla donde sea menester... ¿o es que se me escapa algo?
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-12-2005 a las 04:32:21. Razón: Corrección del código fuente.
Responder Con Cita
  #5  
Antiguo 01-03-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Lightbulb Increible

Cita:
Empezado por dec Ver Mensaje
Código Delphi [-]procedure MostrarCursor(mostrar: boolean);
type TShowCursorProc = function(bShow: BOOL) : HResult; stdcall;
var HandleDll: THandle; FuncionDll: TShowCursorProc; begin HandleDll := LoadLibrary('user32.dll');
if (HandleDll <> 0) then // Se cargó la librería
begin @FuncionDll := GetProcAddress(HandleDll, 'ShowCursor');
if (@FuncionDll <> nil) then // Tenemos la función
begin FuncionDll(mostrar); // Podemos utilizarla, pues
end;
FreeLibrary(HandleDll);
end;
end;
Ciertamente este codigo esta marabilloso. A mi me ha venido como cantaro a la fuente para hacer las cosas que necesito con dll. Jaaaa!

Última edición por fide fecha: 01-03-2008 a las 18:12:19.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 01:39: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
Copyright 1996-2007 Club Delphi