Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Ya he visto tu sistema de plugins y no es lo que necesito hacer, por cierto igual ahí usas lo mismo que yo estoy aprendiendo, a cargar bpls dinámicamente, ahora, con lo de la apuesta creo que te gano
ya que según he leido (espero haber entendido bien) osea si marcas esa casilla y compilas de esa forma qué pasaría si NO existiría el package1.bpl ? lanzaría un error, es mas, en el ejemplo 1 de ese mismo fantástico artículo explican de hacer check a esa casilla, que por cierto ya no es
vcl50;Package1.bpl. yo uso delphi 2009 y con eso no me funcionó, cambié a solo vcl;Package1.bpl y así si funcionó perfectamente, pero está claro el mismo artículo dice que qué pasaría si no distrubuyo el bpl. la app fallaría, entonces por este mismo motivo es lo que hacen el ejemplo2, osea cargarlos dinámicamete y ya SIN linkear, y es ahí ya donde no me funciona el ejemplo2 de ese zip del artículo.

Espero que me haya explicado bien y tenga las cosas claras hasta aquí, a ver si no estoy totalmente aquivocado que suele ser la mayoría de las veces

muchas gracias y a ver si alguien más me da una idea del problema y prueba a bajar el .zip del artículo original que está en el siguiente link

http://edn.embarcadero.com/article/27178

y el adjunto está al final

Saludos!
Responder Con Cita
  #2  
Antiguo 08-04-2009
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: 18.297
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 BlackDaemon Ver Mensaje
Ya he visto tu sistema de plugins y no es lo que necesito hacer, por cierto igual ahí usas lo mismo que yo estoy aprendiendo, a cargar bpls dinámicamente
Pues justamente por eso te recomendé que leyeras el artículo y que revisaras el proyecto de ejemplo (que por cierto he corregido el link porque no era correcto). Porque ahí se hace lo mismo que tú estás haciendo (GetClass) y sí funciona correctamente.


Cita:
Empezado por BlackDaemon Ver Mensaje
ahora, con lo de la apuesta creo que te gano
Todavía albergo esperanza...

Cita:
Empezado por BlackDaemon Ver Mensaje
ya que según he leido (espero haber entendido bien) osea si marcas esa casilla y compilas de esa forma qué pasaría si NO existiría el package1.bpl ? lanzaría un error, es mas, en el ejemplo 1 de ese mismo fantástico artículo explican de hacer check a esa casilla, que por cierto ya no es
vcl50;Package1.bpl. yo uso delphi 2009 y con eso no me funcionó, cambié a solo vcl;Package1.bpl y así si funcionó perfectamente, pero está claro el mismo artículo dice que qué pasaría si no distrubuyo el bpl. la app fallaría, entonces por este mismo motivo es lo que hacen el ejemplo2, osea cargarlos dinámicamete y ya SIN linkear, y es ahí ya donde no me funciona el ejemplo2 de ese zip del artículo.
Pues creo que eso es lo que no has entendido bien.

PREMISA PARA PODER UTILIZAR RTTI (GetClass): Tanto en el artículo de Vino Rodigues (parte del FINALLY) como en el mío (donde están las RECOMENDACIONES), se deja bien claro que el Check "Build with runtime Packages" debe estar marcado. ¿Porqué? Por explicarlo de una forma sencilla, si compilas sin Runtime packages la información de RTTI del programa principal y de los packages dinámicos no se encuentra en el mismo lugar, por tanto al acceder desde el programa a esa información del package (con GetClass), no la encuentra. La única forma de que esa información esté accesible es compilando el programa con Runtime Packages.

Por otro lado están los packages que se cargan de forma estática, que son los que aparecen en la lista que comentas. El package1 que aparece en esa lista, se carga de forma estática, por eso está ahí. Los packages que tú vas a cargar de forma dinámica (con LoadPackage) no deben estar es esa lista. Por la razón que tú comentas (si no existieran fallaría la aplicación).

(1) Activa el CheckBox en las opciones del proyecto.
(2) Elimina los packages que vayas a cargar con LoadPackage de esa lista
(3) Ejecuta el código y prueba el GetClass.

CONCLUSIONES.

(1) Si tu aplicación se compila/linka sin packages dinámicos (todo en un EXE), puedes usar LoadPackages para cargar packages dinámicos, pero no podrás utilizar la información de RTTI (por ejemplo GetClass) de los packages cargados con LoadPackages desde la aplicación (GetClass de las clases del package siempre devolverá nil).

(2) Si tu aplicación compila con runtime packages, hay packages cargados estáticamente (de los que has hecho un USES -los de la VCL, por ejemplo-) y que estarán en la lista de packages (si no están la aplicación falla) y packages cargados dinámicamente con LoadPackage. Estos últimos no deben estar en la lista de packages (opciones del proyecto) y si no están disponibles, fallará la llamada a LoadPackage, pero no la ejecución de la aplicación. Con este escenario la información RTTI de todos los packages cargados (estáticos y dinámicos) está en el mismo lugar, por lo tanto puedes acceder a ella -para todos los packages- sin problemas (Getclass).

Espero haberme expllicado medianamente bien.

Un saludo.

P.D: Sigo creyendo que ganaré la cerveza.
__________________
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
  #3  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Pues sí que te entendí todo, peeero una cosa que no me queda clara.

¿Por qué los ejemplos que exponen ahí, los del zip no funcionan ?

Osea ahí dice bien claro que debería cargarte el form2 del bpl "dinámicamente" pero no lo hace y es ahí donde probé que da el valor de _nil_ y según he leido

pero he vuelto a compilar el programa activando build runtime packages y SOLO dejé ahí "vcl" y eliminé package1 y funcionó, me mostró el form2, es correcto lo que hice?

O solo debería marcar la casilla y quitar _todo_ de ahí, vale decir que lo probé de esa forma y pues el resultado es lo mismo que si la casilla esté desmarcada jeje

BUeno, si es así, entonces lo correcto es que la casilla esté activada y SOLO esté la palabra vcl ahí y listo ?
si sería eso entonces doy mi "primer" problema por solucionado y muchas gracias neftalí por tantas palabras para resolver algo difícil para mí

Saludos!!

PD por cierto, no a terminado aún este hilo, ya que ahora quiero hacer lo de cargar componentes en un BPL y poder acceder a estos desde un form y crearlos, acceder a sus métodos, etc, a ver si es to es posible

edit: bueno, sobre la cerveza me la ganaste, venga ya, nos vemos en la taberna que pago todo yo, y para el que se quiera unir a la farra igual que vaya

Última edición por BlackDaemon fecha: 08-04-2009 a las 17:48:57. Razón: oiga, ¿y la cerveza?
Responder Con Cita
  #4  
Antiguo 08-04-2009
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: 18.297
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 BlackDaemon Ver Mensaje
¿Por qué los ejemplos que exponen ahí, los del zip no funcionan ? ...pero he vuelto a compilar el programa activando build runtime packages y SOLO dejé ahí "vcl" y eliminé package1 y funcionó, me mostró el form2, es correcto lo que hice?
Pues sí funcionan si los configuras correctamente.
En el primero, como hace el USES del formulario2 en ese caso ya está claro, lo está linkando estáticamente.
En el segundo caso lo hace bien. No hace el USES y lo carga con LoadPackage. En ese caso puedes ver que si marcas o desmarcas la casilla el resultado de GetClass es diferente y pasa lo mismo con el Ejemplo3.
En el ejempo3 de los dos ítems del menú, el primero lo carga estáticamente, puesto que está haciendo el USES y el segundo dinámicamente, pero para que el segundo funcione vuelve a hacer falta que se active el Check de "Build with runtime packages".

En cuanto a qué packages poner en ese Edit, pues como bien dices, VCL y los que se usen linkados estáticamente. Segun lo que utilices; vcl;rtl;dbrtl;adortl;...

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
  #5  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
hola

A ver, estoy más perdido que no se qué, a ver, os explico mi problema, yo por ejemplo quiero meter unos componentes en un BPL y poder crearlos desde mi formprincipal, pudiendo acceder a ellos como si estaríen en mi form, y como son varios necesito hacer como una especie de API para que me digan todos sus métodos, propiedades, etc

Se entiende lo que quiero hacer?

me gustaría que alguien me pueda pasar un ejemplo de como hacer esto con componentes

saludos!
Responder Con Cita
  #6  
Antiguo 09-04-2009
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: 18.297
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 BlackDaemon Ver Mensaje
os explico mi probálema, yo por ejemplo quiero meter unos componentes en un BPL y poder crearlos desde mi formprincipal, pudiendo acceder a ellos como si estaríen en mi form, y como son varios necesito hacer como una especie de API para que me digan todos sus métodos, propiedades, etc

Pues puedes crear componentes en un package sin problemas. En realidad todos los componentes que se distribuyen para delphi suelen venir de esa manera.
Lo que no entiendo es que si quieres utilizar esos componentes en tus formularios, deberás instalarlos en el IDE y usarlos en diseño.

Si sólo quieres crearlos en ejecución, puedes cargar ese package dinámicamente, pero no acabo de enterder muy bien la utilidad de esto último.
__________________
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



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
Hilos con objetos dinámicos netoDelphi Varios 2 27-11-2006 20:46:05
Dudas con paquetes... adlfv OOP 1 01-09-2005 16:18:10
Paquetes en delphi davezf Varios 4 05-04-2005 20:04:18
paquetes ¿? acertij022 Internet 0 20-08-2003 16:06:31
Paquetes en runtime rezahe Varios 4 25-05-2003 06:27:26


La franja horaria es GMT +2. Ahora son las 22:18:23.


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