FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
me parece que lo que esta fallando es ExtractFileDir,
no conozco bien como funciona, pero FileExists no te daria ese error |
#2
|
|||
|
|||
El problema no está en ExtractFileDir, porque cambié un poco el código para que me mostrara un mensaje si existe el archivo o no, y aún así me aparece el error de que no existe el archivo Funciones.dll, ni si quiera me muestra el mensaje "existe" o "no existe", que he puesto en los ShowMessage.
Código:
If FileExists( ExtractFilePath( Application.ExeName ) + 'Funciones.dll' ) Then ShowMessage( 'existe' ) Else Begin ShowMessage( 'no existe' ); Directory := ExtractFileDir( ParamStr( 0 ) ); mxStorage1.ExtractTo( Directory ); End; |
#3
|
|||
|
|||
Hola
Me parece que el enlace a la Dll es el problema, si es un enlace estatico pues piensa en cargarlo mejor en forma dinamica, ya que si es un enlace estatico al inicializar la aplicación y antes de que se ejecute cualquier linea de codigo el mismo windows verifica la existencia del Dll y si no existe entonces bota ese error. Si cambias a la asignación dinamica no tendras ningun problema. Suerte |
#4
|
|||
|
|||
Y cómo se hace eso?, porque yo la declaro de esta forma:
Código:
Function ValRut( Rut: String ): String; StdCall; External 'Funciones.dll' Name 'ValRut'; |
#5
|
|||
|
|||
Si yo por el error que dices yo creo que uhilari tiene razon.
Por ejemplo ESTATICA //declaracion procedure DllMessage(s:string); external 'dll.dll' //La llamas procedure TForm1.Button1Click(Sender: TObject); begin DllMessage('hola'); end; ---------------------------------------------------- DINAMICA //declaracion type GetFunc = procedure( Param: string ); register; var GF : GetFunc; H : Thandle; //La llamas procedure TForm1.Button1Click(Sender: TObject); begin h := LoadLibrary( 'dll.dll' ); If H <> NULL then begin @GF := GetProcAddress( h, 'DllMessage' ); GF('hola'); FreeLibrary( h ); end; end; Saludos
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
#6
|
|||
|
|||
Muchas gracias a todos los que me respondieron.
Tenías razón uhilari el problema se debía a que la carga de la dll era estática. Me sirvió bastante tu código Descendents con ese código solucioné el problema. Muchas gracias. |
#7
|
|||
|
|||
Hola de nuevo
Vaya Descendens me gano la publicación del codigo; pero para ser sinceros no me gusta la forma como lo hizo, me refiero a la utlización de las Variables globales GF y h yo prefiero variables locales o en todo caso un atributo de la clase TForm1; pero como dije antes el codigo funciona aunque les aconsejo en la medida de las posibilidades no usar las variables globales siempre traen problemas. Suerte a Todos |
|
|
|