Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Exportar ejecutable y bpl a máquina de usuario (https://www.clubdelphi.com/foros/showthread.php?t=97404)

Nano Ramírez 12-04-2025 20:22:19

Exportar ejecutable y bpl a máquina de usuario
 
Buen día. Tengo un Bpl runtime creado en Rad 10.3 y una aplicación creadaen Delphi 2010 que lo consume cuando lo necesita. Todo funciona correctamente.
Quiero pasarlo a la máquina del usuario, pero al ejecutar la aplicación me aparece "Invalid package handle". Entiendo que la aplicación no encuentra el Bpl. Dicho Bpl ya lo ubiqué en diferentes rutas en la variable de entorno Path en la máquina del usuario pero sigue apareciendo el error. Algún paso que me esté brincando?

Casimiro Notevi 13-04-2025 10:34:50

Creo que tendrás que compilarlo en esa otra versión de delphi.

Neftali [Germán.Estévez] 14-04-2025 09:04:00

Cita:

Empezado por Nano Ramírez (Mensaje 563765)
Buen día. Tengo un Bpl runtime creado en Rad 10.3 y una aplicación creadaen Delphi 2010 que lo consume cuando lo necesita. Todo funciona correctamente.
Quiero pasarlo a la máquina del usuario, pero al ejecutar la aplicación me aparece "Invalid package handle". Entiendo que la aplicación no encuentra el Bpl. Dicho Bpl ya lo ubiqué en diferentes rutas en la variable de entorno Path en la máquina del usuario pero sigue apareciendo el error. Algún paso que me esté brincando?

¿Supongo que ya lo has probado, pero lo has puesto junto al ejecutable?
También deberías ver si necesitas alguna dependencia más. Para eso puedes usar "Dependency Walker" o "PE information" de los GExperts (ya hemos hablado en alguna ocasión de ellos, aquí y aquí).

Nano Ramírez 15-04-2025 20:59:46

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 563771)
¿Supongo que ya lo has probado, pero lo has puesto junto al ejecutable?
También deberías ver si necesitas alguna dependencia más. Para eso puedes usar "Dependency Walker" o "PE information" de los GExperts.

Sí, ya lo intenté poniéndolo junto al ejecutable pero no funciona así en la máquina del usuario. De hecho, me estoy topando con una situación que tengo duda. Ya retiré el BPL de las rutas del library path y del search path que tiene el proyecto en la máquina donde lo estoy desarrollando y aun así me sigue cargando el BPL. No debería fallar al cargar con LoadPackage? PD; el proyecto lo tengo sin BWRP

Neftali [Germán.Estévez] 16-04-2025 08:28:20

Cita:

Empezado por Nano Ramírez (Mensaje 563815)
...Ya retiré el BPL de las rutas del library path y del search path que tiene el proyecto en la máquina donde lo estoy desarrollando y aun así me sigue cargando el BPL. No debería fallar al cargar con LoadPackage? PD; el proyecto lo tengo sin BWRP

Con LoadPackage indicas el lugar desde donde debe cargar la BPL. Si indicas el path completo, debería cargarla desde donde indicas, sino está en esa ubicación, debería fallar.
Revisa el código que usas para la carga.

Y asegurate de que no tienes dependencias en la aplicación que o estén linkando de forma estática antes de hacer el Load package.

Hay una forma fácil de comprobarlo.
1) Renombra la BPL (del path donde haces la carga con LoadPackage)
2) Ejecuta la aplicación (debería funcionar)
3) Vuelve a renombrar la BPL (del path donde hacer la carga con LoadPackage) y deja el nombre y ubicación correcta.
4) Ejecuta el código que lanza el LoadPackage => Debería cargarla sin problemas.

De esta forma te aseguras de que no está "linkada" de forma estática por dependencias y que el LoadPackage funciona correctamente.

Neftali [Germán.Estévez] 16-04-2025 08:30:30

El código básico para cargar el package dinámicamente sería similar a este:

Código Delphi [-]
...
  _log('Cargando BPL gestión procesos...');
  ==>  Path completo. IMPORTANTE!! 
  var path:string := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + PACKAGENAME;
  try
    HPackage := LoadPackage(path);
    // Cargado correctamente?
    if (HPackage > 0) then begin
      _log('Cargado el package ' + PACKAGENAME + ' correctamente');

      // Trabajo a realizar con la BPL
      ...

    end
    else
      _log('Error!!! No se ha encontrado ' + path);

  except
    _log('Error!!! No se ha podido cargar el paquete ' + PACKAGENAME);
  end;
...

Nano Ramírez 17-04-2025 00:13:16

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 563818)
Con LoadPackage indicas el lugar desde donde debe cargar la BPL. Si indicas el path completo, debería cargarla desde donde indicas, sino está en esa ubicación, debería fallar.
Revisa el código que usas para la carga.

Y asegurate de que no tienes dependencias en la aplicación que o estén linkando de forma estática antes de hacer el Load package.

Hay una forma fácil de comprobarlo.
1) Renombra la BPL (del path donde haces la carga con LoadPackage)
2) Ejecuta la aplicación (debería funcionar)
3) Vuelve a renombrar la BPL (del path donde hacer la carga con LoadPackage) y deja el nombre y ubicación correcta.
4) Ejecuta el código que lanza el LoadPackage => Debería cargarla sin problemas.

De esta forma te aseguras de que no está "linkada" de forma estática por dependencias y que el LoadPackage funciona correctamente.


Gracias Neftali, justo ví que faltaban librerías dependientes.
Por si a alguien más le pasa, a mí me ayudó entrar a Project→Deployment para poder ver las librerías necesarias y su ubicación. Antes de mostrarlas te va a pedir compilar el proyecto en automático. Después de compilar te las mostrará:D

navbuoy 19-04-2025 04:44:41

siempre que vayas a distribuir tu app tienes que mirar en deployment si, y copiar todos los BPL y archivos que necesita junto al EXE


La franja horaria es GMT +2. Ahora son las 13:20:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi