Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.474
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Es correcto.

Si una aplicación utiliza package dinámicos como esta, y para ello usa RTTI, debe estar compoilada TODA con packages. Es decir, para utilizar los packages tal y como están aquí tu aplicación debe estar compilada con el flag "Build with runtime packages".
Eso significa que junto con tu aplicación y sus packages, deberás distribuir los packages de la VCL necesarios para que esta funcione.

Para saber qué packages necesitas puedes usar "dependency Walker", GExperts (PE explorer) o el "Executable Analizer (Cn)" que el otro día subí al FTP del Club.

Con cualquiera de estos programa si les das el ejecutable te dicen la lista de packages que debes distribuir con él.



La otra opción es generar un sólo ejecutable (sin "Build with runtime packages") y cargar los packages de forma dinámica, pero en ese caso no podrás utilizar RTTI. Es decir, podrás cargar los packages como si fueran DLL's, y perderás MUCHO potencial (todo lo que te ofrece RTTI, o lo que es lo mismo, pierde toda la gracia , y en ese caso casi es más recomendable usar DLL's).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #2  
Antiguo 15-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
No hay caso, no he podido resolverlo.

Si corro el programa que sugirieron, me arroja que utiliza en package rtl100.bpl (entre otros).

Ahora bien si en la opción de los packages de la aplicación agrego el rtl100.bpl, me arroja que este no existe. Si reviso el listo de packeges existe uno que se llama rtl.bpl.

Revise el directorio de windows\system32, y encontre el packages. si trato de instalarlo no hay caso.. no me deja, dice que ya esta instalado.

Como puedo solucionar esto?

Por ultimo en un PC que estaba limpio, es decir, nunca se había instalado Delphi 2006, lo instale. Creé un proyecto nuevo, el cual consistia en un TForm, el cual contenia un TButton. Me fui a la opción de los packages y le seleccione la opción de build with packages, lo compile y lo mismo...

No se que hacer... ayuda porfa

Gracias
Responder Con Cita
  #3  
Antiguo 16-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
Finalmente lo que hice fue buscar en el equiopo de desarrollo todas las librerias que necesitaba la aplicación, y las copie a la carpeta donde se copió la aplicación.

El punto es que tuve que copiar todas las librerias, no solo con la que tenia problema....

Como puedo agregar las librerias en el mismo ejecutable?
Me imagino que al seleccionar el build with packages, existe unaopción de agregar packages... asumo que aquí es donde se agregan.. esto es asi??

Asumiendo eso, lo realice y no me funcionó... Porque podría ser esto?

Otra idea, como puedo selccionar de donde leer las librerias del ejecutable... en las mismas opciones del ejecutable hay un item que dice directorios... aquí escribo el directorio de la librerias, para no tenerlas en la misma carpeta donde está el ejecutable... y tampoco me fucniona.

Son varias preguntas, espero me puedan ayudar.

Gracias
Responder Con Cita
  #4  
Antiguo 16-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.474
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por mjjj Ver Mensaje
Finalmente lo que hice fue buscar en el equiopo de desarrollo todas las librerias que necesitaba la aplicación, y las copie a la carpeta donde se copió la aplicación.

El punto es que tuve que copiar todas las librerias, no solo con la que tenia problema....
Bueno, eso es lo que hay que hacer cuando compilas un programa utilizando "Build with runtime packages"; Junto a tu EXE (y en este caso los BPL's dinámicos), debes copiar las BPL's de delphi que tu programa necesite; Pueden ser 4, 10 o 20, dependiendo de las características y componentes que hayas utilizado.
Eso es correcto, no te has equivocado.
Lo lógico es que tu instalador, cuando lo hagas, las copie.

Cita:
Empezado por mjjj Ver Mensaje
Como puedo agregar las librerias en el mismo ejecutable?
Me imagino que al seleccionar el build with packages, existe unaopción de agregar packages... asumo que aquí es donde se agregan.. esto es asi??
Asumiendo eso, lo realice y no me funcionó... Porque podría ser esto?
Pues no hay esa opción. Ya lo has hecho bien.
Si quieres utilizar carga dinámica de Packages y RTTI, debes compilar tu aplicación con "Build with runtime packages" y por tanto desdes distribuir:
* EXE
* BPL's dinámicos que has creado tú
* BPL's de librerías


Cita:
Empezado por mjjj Ver Mensaje
Otra idea, como puedo selccionar de donde leer las librerias del ejecutable... en las mismas opciones del ejecutable hay un item que dice directorios... aquí escribo el directorio de la librerias, para no tenerlas en la misma carpeta donde está el ejecutable... y tampoco me fucniona.
Si haces la carga dinámica con LoadPackage, al cargar el packages le indicas donde se encuentra.
Si realizas carga estática, las librerías deben estar en el directorio del ejecutable o en un directorio del path del sistema (C:\Windows), por ejemplo. Si quieres que estén en otro, debes especificarlo en el path.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 16-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.474
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Post DLL's, DPL's, carga dinámica, carga estática y Packages en Runtime

DLL's, DPL's, carga dinámica, carga estática y Packages en Runtime

Lo he explicado aquí, espero que te aclare un poco las cosas.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 16-07-2010 a las 13:08:27.
Responder Con Cita
  #6  
Antiguo 19-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 20
mjjj Va por buen camino
Gracias Neftali por tu respuesta, me fue de mucha ayuda.
Tengo otras dudas.

Mi aplicación consta del ejecutable (3 forms y 1 DataModule), 3 paquetes de carga dinámica (desarrollados por mi), y librerias de terceros.

Me interesa que las librerias de terceros se cergen de forma estatica, pero que ademas esten en una carpeta dentro de la carpeta donde esta instalado la aplicación. Esto se define en las opciones de proyecto... ¿en search path?

El Datamodule contiene los componentes necesarios para conectarme con la BD. En los paquetes se carga dinamica, le agrego el datamodule como "uses datamodule". el problema ocurre al tratatr de cargar un paquete cuando tengo otro abierto, me arroja que en otro paquete ya se esta usuando el datamodule.

Como puedo solucionar esto?

Gracias
Responder Con Cita
  #7  
Antiguo 19-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.474
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por mjjj Ver Mensaje
Mi aplicación consta del ejecutable (3 forms y 1 DataModule), 3 paquetes de carga dinámica (desarrollados por mi), y librerias de terceros.
Me interesa que las librerias de terceros se cargen de forma estatica, pero que ademas esten en una carpeta dentro de la carpeta donde esta instalado la aplicación. Esto se define en las opciones de proyecto... ¿en search path?
Para que las librerías (en este caso las de terceros) se carguen de forma estática no debes hacer nada especial; Lo mismo que haces cuando utilizas Units o componentes de Delphi. Añadir las units que necesitas al USES y eso hace que esas librerías se comprueben y se "linken" en compilación. Por lo tanto esas librerías se cargarán de forma estática.
justamente al añadirlas a los USES estás consiguiendo eso.


Cita:
Empezado por mjjj Ver Mensaje
El Datamodule contiene los componentes necesarios para conectarme con la BD. En los paquetes se carga dinamica, le agrego el datamodule como "uses datamodule". el problema ocurre al tratatr de cargar un paquete cuando tengo otro abierto, me arroja que en otro paquete ya se esta usuando el datamodule.
Como puedo solucionar esto?
Este es el caso justo al contrario de lo que te he explicado antes.
Para los paquetes que quieres cargar de "forma dinámica" NUNCA debes añadir las Units que contienes al USES; Al añadir una unit al USES, estás haciendo que ese paquete se cargue de forma estática.

Ves la diferencia:

CARGA ESTÁTICA:
Añades la units a los USES; Eso hace que el compilador las necesite en el momento de compilar y las compruebe; Esos USES hacen que esas BPL's se carguen de forma estática. Es lo que hacemos normalmente con todas las units de Delphi (Classes, forms, stdCtrls, Grids, DB,...) y con cualquier otro componente de terceros que uses.

CARGA DINÁMICA: Para un package que quieres cargar de forma dinámica, ninguna de las units que contiene debe estar referenciada en un USES. En cuanto haya un USES que haga referencia a una de sus units, se cargará estáticamente.

Por defecto los packages que se cargan de forma estática, se buscan en primer lugar, en el directorio de la aplicación y luego en los directorios del path. Si copias los BPL's que se cargan de forma estática en el mismo directorio de tu aplicación, no debes hacer nada especial; Es el primer sitio donde se buscan.

No deberías añadir en el USES el Datamodulo; Creo que lo lógico sería pasarlo en ejecución; A través de una función o propiedad, por ejemplo. Si lo añades al USES de cada paquete, saeguramente delphi lo estará añadiendo en cada uno de los packages, de ahí el error en ejecución.


Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FirebirdConfig ahora en Plugin para IBExpert egostar Noticias 15 26-09-2008 22:45:17
Plugin para outlook fjardelphiyahoo OOP 1 18-09-2007 13:14:01
¿Como instalo plugin en IBexpert? NPIdea Firebird e Interbase 1 22-06-2007 13:27:10
Instalar Plugin en eclipse Paoti JAVA 3 08-01-2007 20:47:23
Que es un plugin? chavetaz Varios 2 19-10-2004 14:41:29


La franja horaria es GMT +2. Ahora son las 00:08:47.


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