Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Añadir más de una ruta dentro de la "Library path" de Delphi (https://www.clubdelphi.com/foros/showthread.php?t=90401)

elrayo76 31-05-2016 16:50:35

Añadir más de una ruta dentro de la "Library path" de Delphi
 
Tengo un Framework que se ha ido desarrollando con el tiempo y que se usa en varias aplicaciones. Este Framwork tiene varias carpetas dentro para separar mejor los fuentes que este contiene y no mezclar cosas que no tienen nada que ver.

Mi pregunta es la siguiente. Como se puede hacer para referencias en las Library Path todas estas carpetas sin necesdad de tener que poner cada una de ellas. El problema es que si en algún momento se crea una nueva carpeta, todos los desarrolladores que usan ese Framework se tienen que enterar para agregar la nueva carpeta a las Library Path.

Tampoco quiero tener que hacer referencia de los fuentes dentro de los distintos proyectos, solo quiero que este la unit necesaria en las USES que corresponda.

Si existe alguna forma de solucionar esto y que no sea a travez de las library path también puede ser bienvenida para evaluar su posible utilización.

Aclaro que estoy usando RAD Studio XE8.

Saludos,
El Rayo

dec 31-05-2016 20:18:10

Hola,

Hasta donde yo sé no es posible hacerlo, o sea, que hay que añadir las rutas una a una. Me gustaría que algún otro compañero me pudiese desdecir. Por lo demás, tal vez pueda atacarse el asunto por otro lado, y es, ¿dónde guarda Delphi esa información? ¿En algún archivo de configuración? ¿En el registro de Windows? Entonces, tal vez podría prepararse algún programa o archivo BAT que se encargase del trabajo...

ecfisa 31-05-2016 21:38:21

Hola.

En Delphi 7 el Library Path se almacena en el registro de Windows, en la clave HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Library.

Entonces para leer y/o agregar rutas, bastan dos funciones:
Código Delphi [-]
...
uses Registry;

function ReadSearchPath: string;
var
  rg: TRegistry;
begin
  rg := TRegistry.Create;
  try
    rg.RootKey := HKEY_CURRENT_USER;
    if rg.OpenKey('\Software\Borland\Delphi\7.0\Library', False)  then
    begin
      Result := rg.ReadString('Search Path');
      rg.CloseKey;
    end;
  finally
    rg.Free;
  end;
end;

procedure SaveSearchPath(const Path: string);
var
  rg: TRegistry;
begin
  rg := TRegistry.Create;
  try
    rg.RootKey := HKEY_CURRENT_USER;
    if rg.OpenKey('\Software\Borland\Delphi\7.0\Library', False)  then
    begin
      rg.WriteString('Search Path', Path);
      rg.CloseKey;
    end;
  finally
    rg.Free;
  end;
end;
Seguramente la clave debe cambiar bastante en XE8..., pero sería cosa de hurgar un poco en el registro para ver donde almacena esa información y probar...

Saludos :)

elrayo76 01-06-2016 15:22:26

Gracias por esponder, pero no necesio código para usar las claves del registro.

Lo que quiero es de alguna manera no tener que entrar a configurar todas las carpetas que tengan los fuentes como explique antes. Que se pueda poner algo que apunte a todas las carpetas existentes y si se crean nuevas carpetas con nuevos fuentes que ya este sin tener que tocar nada.

Lo que se me ocurre si no queda otra al ver tu código es generar un ejecutable que recorra todas las carpetas contenidas dentro de la principal las agregue automáticamente si no existen en esa ruta del registro, luego de eso que se ejecute el entorno de desarrollo de Delphi. Esto no es lo mejor pero puede funcionar.

Saludos,
El Rayo

ecfisa 02-06-2016 07:16:31

Hola.
Cita:

Empezado por elrayo76 (Mensaje 505829)
...
Lo que se me ocurre si no queda otra al ver tu código es generar un ejecutable que recorra todas las carpetas contenidas dentro de la principal las agregue automáticamente si no existen en esa ruta del registro, luego de eso que se ejecute el entorno de desarrollo de Delphi. Esto no es lo mejor pero puede funcionar.

Si esa era la idea. Recorrer lineal o recursivamente (según lo requiera la estructura) la carpeta padre e incluir las carpetas inexistentes en donde Delphi lee el Library Path almacenado.

Saludos :)

AgustinOrtu 02-06-2016 07:31:03

Se me ocurren dos soluciones:

1. Agregar explicitamente las unidades que se deben importar al proyecto, esto es, no usar el library path. Puede resultar engorroso, pero tiene la enorme ventaja de que los tiempos de compilacion disminuyen enormemente. Un library path cargado siempre es mas lento de procesar. Y si el proyecto es grande + el library path esta cargado, parece que estamos trabajando en C++ (no se lo tomen a mal los adeptos por favor :p).

Podrias dejar un proyecto "esqueleto" o "template" con todas las unidades, mantenerlo con control de versiones y siempre actualizarlo cuando se agregan nuevas unidades

2. Este metodo nunca lo probe. Seria no utilizar los .pas directamente, sino usar los .dcu. Te creas un paquete con tu framework, y lo compilas. Pones que el output folder sea por ejemplo "C:\framework\{$PLATFORM}\{$CONFIG}

No me acuerdo exactamente los nombres de las pseudo variables, pero la idea es que te queden

"C:\framework\Win32\Release\"
"C:\framework\Win32\Debug\"
"C:\framework\Win64\" ...

Dentro de cada una de esas carpetas, estan los .dcu correspodientes. No los organices en carpetas como el codigo fuente de tu framework; dejalos todos en la raiz.

Ahora agregas estas carpetas a tu library path y listo, en un solo directorio tenes el codigo ya compilado y listo para usar

elrayo76 02-06-2016 17:13:58

AgusinOrtu, lo que dices en el punto 2 tampoco lo he probado pero si llego a ir por ese camino, será cuaestión de ver como resulta.


La franja horaria es GMT +2. Ahora son las 16:34:00.

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