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-07-2005
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
cesar_picazo Va por buen camino
Ruta para tomar Dlls

Bujenas tardes, Estoy utilizando delphi 6 y estoy utilizando varias DLLs.


Al agregar una libreria mi aplicacion fallo, esto debido a que la DLL midas no se encuentra en el directorio system32, anteriormente con solo contar con esta libreria en la ruta de mi ejetuble era suficiente. Pero al utilizar otra libreria ya no busca la Dll en la ruta de mi exe.

Me imagino que existe alguna forma de decirle a mi exe que busque dicha dll en la ruta de mi exe.

Alguien sabe como establecer la ruta de donde se van a tomar las librerias?

Ya verifique el currentedir(); y esta es la misma que la de mi exe.

Les agradesco su ayuda.
Responder Con Cita
  #2  
Antiguo 02-07-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,

¿Probaste con "LoadLibrary"? Lo siguiente es un extracto del ejemplo que viene en la ayuda de Delphi para esta función:

Código Delphi [-]
  var
    Time: TTimeRec;
    Handle: THandle;
    GetTime: TGetTime;
    ...
  begin
    Handle := LoadLibrary('libraryname');
    if Handle <> 0 then
    begin
      @GetTime := GetProcAddress(Handle, 'GetTime');
  
      if @GetTime <> nil then
      begin
        GetTime(Time);
        with Time do
          WriteLn('The time is ', Hour, ':', Minute, ':', Second);
      end;
      FreeLibrary(Handle);
    end;
  end;

Actualización: Evidentemente, no te respondo a lo que preguntas... puesto que, después de leer tu pregunta con más atención, una cosa no tiene que ver con la otra... o no del todo.

Respondería lo que ya sabes, a lo que se ve: que el programa tendría que tratar de localizar las "DLLs" en el directorio donde se encuentre; si no las encuentra allí buscarlas entonces en el directorio de Windows; creo que también en los directorios System y System32 del mismo directorio de Windows.

No sé... se me hace raro... si supiera cómo haces uso del archivo DLL, esto es, si llamas a alguna función en concreto, o si declaras funciones externas implementadas en alguna DLLs...

Pero me voy por los cerros de Úbeda. Porque si usaras esto último podría hacerse algo así:

Código Delphi [-]
 procedure DoSomething; external 'MYLIB.DLL';

Y ahí ya se está dando la posibilidad de indicar dónde encontrar la DLL en cuestión para el procedimiento declarado.

O si usaras la DLL puntualmente, para lo cual podría valerte la función "LoadLibrary" indicada arriba, junto con sus "compañeras", pero esto tú ya lo sabrás... no sé a qué me canso cansándote.

Como ves, yo también estaré atento a quien pueda arrojar luz sobre este asunto. Lamento este rollo.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-07-2005 a las 18:07:59.
Responder Con Cita
  #3  
Antiguo 02-07-2005
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
cesar_picazo Va por buen camino
Gracias, pero no sera mas Facil

Hola, gracias por la respuesta, de hecho tambien uso algunas librerias y hago lo que tu me dices, pero porque conosco las funciones y procedimientos del mismo.

Pero en el caso de la DLL midas desconosco completamente las funciones de la libreria y ademas para agregar una libreria con loadlibrary, se me hace mucho rollo, ya que por una funcion que no prototipe bien o escriba correctamente fallaria.

Estuve viendo opciones para solucionar el problema, si no hay alguien que conosca que hacer lo que tendre que hacer es lo siguente.
Opciones
1- copiar la libreria Midas a la carpeta del sistem32 y evitar el error.
2- Es ver si agrego la libreria midas a la aplicacion aplicacion aunque aumente de tamaño el Exe.

Pero si alguien conoce alguna forma de hacerlo pues me ahorro hacer lo anterior.
Responder Con Cita
  #4  
Antiguo 02-07-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,

Yo tengo entendido (creo que lo he dicho más arriba) que Windows "busca" primero en el directorio del programa, a continuación en Windows, luego en System y más allá en System32 por los recursos que necesita y no encuentra a bote pronto: recursos es mucho decir... en este caso se nota también mi estulticia, que es infinita.

Sin embargo, se me ocurrió algo cuando te he leído este último comentario que has escrito, como si se me hubiera encendido una bombilla, así que no me hagas mucho caso: ¿Y si existiera ya una librería igual a la que precisas, pero tal vez de distinta versión, en el directorio de Windows, o en System, o en System32?

¿No sería posible que por algo así Windows se volviera un poco "loco" y no supiera bien hacia dónde tirar, esto es, de qué librería trata? No sé, que hubiera una especie de conflicto de ese tipo. Supongo que no es esto, pero, es lo que se me ocurre y, por si sirve de algo quedo dicho.

Por cierto, que sí, que llevas razón, vamos, que lo de "LoadLibrary" o las declaraciones de "funciones externas" no tiene que ver con lo que nos ocupa, seguro, vamos, fue que escribí lo primero que pensé, si es que a lo que yo hago se le puede llamar así.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 04-07-2005
cesar_picazo cesar_picazo is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
cesar_picazo Va por buen camino
oks, lo que hice fue, pero

Gracias por la respuesta, estoy utilizando DbExpress para conectarme a DBs Firebird, pero por estuve buscando una libreria para compactar informacioncion y me encontre una que se llama ZIP Master, lo cual ya hace la aplicacion sin ningun problema. Pero en algun punto se pierde la ruta en donde esta la DLLs de midas. Depurando la aplicacion lo que hice fue borrar la DLLs de midas del directorio System32 para poder emular el error en mi SO en donde esta instalado Delphi.

Me supongo que la DLL hace algo para que estas rutas se cambien.

Nota: el Getcurrentdir(); me sigue regresando la ruta de la aplicacion.

Lo que hice para solucionar el problema fue quitar la dll de compactacion y voy a enseñarme a hacer DLLs para desde una DLL ejecutar el proceso de compactacion.

Por tu ayuda y comentarios gracias
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 08:40:06.


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