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 11-12-2006
ezindetgeio ezindetgeio is offline
Miembro
 
Registrado: dic 2006
Posts: 12
Poder: 0
ezindetgeio Va por buen camino
Acceso a BPLs

Hola a tod@s:

Soy nuevo aquí.

Seguramente este tema ya es recurrente y con un link me contestéis.

Tengo la típica aplicación que está disgregada en .bpl-s.

Hasta ahí bien.

Ahora bien, en distribución de la aplicación me llevo los .bpl y los .exe sólo.

Ahora, en esta distribución, quiero desarrollar otra aplicación basándome en los .bpl con el código típico de:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Paquete: HModule;
  clase: TPersistentClass;

begin

  paquete := LoadPackage('C:\Archivos de programa\Simbad\paquete.bpl');
if Paquete <> 0 then
  begin
    clase := GetClass('TClase');
    if clase <> nil thenShowMessage('Bien')    elseShowMessage('TClase no está')    UnloadPackage(Paquete);
  end;

end.

Pero, se ve que cuando intento cargarlos así no están registradas las clases (ni nada) en el paquete. El paquete se carga, pero siempre me da que la clase no está...

El caso es que en el proyecto principal yo no digo nada especial para que esto funcione, que yo sepa.

Pero ahora mi idea es decirle desde código que cargue los paquetes. No sé si me explico.

¿Hay alguna manera de que se registren estas clases fuera del paquete y las pueda cargar?

¿Hay alguna manera mejor de hacer esto?

¿Hay alguna manera decente de ver todas las clases que contiene un paquete y sus métodos y sus firmas sin tener que volver a meterte en todo el código de los .dcus y todo?

La verdad que no lo entiendo ya que con una DLL no me pasa lo mismo.

¿Algún tutorial o manera adicional?

Este caso concreto está en Delphi 5.0, aunque también me pasa lo mismo con Delphi 7.0.

¡Muchas gracias!

Saludos.

Última edición por ezindetgeio fecha: 11-12-2006 a las 17:28:30.
Responder Con Cita
  #2  
Antiguo 11-12-2006
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.289
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
¿Ya registras las clases que quieres utilizar?
Prueba a utilizar el procedimiento RegisterClass en la initialization del package, y el UnRegisterClass en la finalization del package.

Revisa este sencillo ejemplo, a ver si te aclara algo.
__________________
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 11-12-2006
ezindetgeio ezindetgeio is offline
Miembro
 
Registrado: dic 2006
Posts: 12
Poder: 0
ezindetgeio Va por buen camino
Gracias Neftali.

El problema es en el caso de que los BPLs no sean míos y donde sospecho como bien observas que no están registradas las clases.

¿Hay alguna solución a esto?

¿O no queda más que ir a por el código y meterle el RegisterClass y el UnRegister... en initialization y finalization?

Dicho esto, ¿cuál es la mejor manera aún y todo de poder "explorar" la API de clases y métodos y firmas de las mismas que te provee un BPL?

Desde fuera digo.

Por ejemplo supongamos que yo no trabajo en Delphi y que al otro lado lo que quiero es invocar desde Java con JNI código Delphi. Mucho me temo que me lo tendré que encapsular en una DLL...

Gracias de nuevo.
Responder Con Cita
  #4  
Antiguo 11-12-2006
ezindetgeio ezindetgeio is offline
Miembro
 
Registrado: dic 2006
Posts: 12
Poder: 0
ezindetgeio Va por buen camino
De hecho, a veces tampoco me va ni así.

Mejor dicho, YA no me va.

Adjunto un ejemplo tontísimo.

Unidad que luego empaqueto (como Run-Time):

Código Delphi [-]
unit UClasePrueba;

interface

uses

        Windows, Classes;

type
   TClasePrueba = Class (TPersistent)

     private
       sNombre         : String;
       sEdad    : Integer;

     published

       constructor Create(nombre: String; edad: Integer);
       function GetNombre : String;
       function GetEdad : Integer;
       procedure SetNombre(const nombre: String);
       procedure SetEdad(const edad: Integer);

   end;

var
   ClaseAitor : TClasePrueba;

implementation

 constructor TClasePrueba.Create(nombre: String; edad: Integer);
 begin
   sNombre         := nombre;
   sEdad := edad;
 end;

 procedure TClasePrueba.SetNombre(const nombre: String);
 begin
   sNombre         := nombre;
 end;

 procedure TClasePrueba.SetEdad(const edad: Integer);
 begin
   sEdad         := edad;
 end;

 function TClasePrueba.GetNombre() : String;
 begin
   result:= sNombre;
 end;

 function TClasePrueba.GetEdad() : Integer;
 begin
   result:= sEdad;
 end;

 initialization

        RegisterClass(TClasePrueba);

 finalization

        UnRegisterClass(TClasePrueba);
end.

Formulario que cargaría el .bpl y lo llamaría:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);

var

Paquete: HModule;
clase: TPersistentClass;

begin

Paquete := LoadPackage('C:\Documents and Settings\aillarra\Desktop\Package2.bpl');

if Paquete <> 0 then


  begin


    clase := GetClass('TClasePrueba');


    if clase <> nil then
       ShowMessage('Bien')
    else
     ShowMessage('La clase no está');
 
    UnloadPackage(Paquete);


  end;


end;

end.
Me dice que no encuentra esa clase.

Así que estoy en las mismas.

El hecho de que haga un .exe que en los use tenga los accesos a esos .bpl que como trabajo en local tienen los .dcu y demás y sabe de qué van se me escapa a la hora de distribuir y llevarme sólo el .exe y sus bpl.

¿Cómo sabe ese .exe nada de esos .bpl si no están registrados en ninguna parte?


Última edición por ezindetgeio fecha: 11-12-2006 a las 17:29:43.
Responder Con Cita
  #5  
Antiguo 11-12-2006
Avatar de Albano
Albano Albano is offline
Miembro
 
Registrado: oct 2004
Ubicación: Nogales, Sonora, Mexico
Posts: 422
Poder: 20
Albano Va por buen camino
Hola ezindetgeio! Bienvenido al club!
Te voy a dar un consejo para la redacción de los mensajes:
Cuando escribas código usa la etiqueta para código de delphi y tu código se verá de la siguiente manera:
Código Delphi [-]
procedure TClasePrueba.SetNombre(const nombre: String);
 begin
   sNombre         := nombre;
 end;
Ésto hace que sea mas facil de leer e identificar.
Para hacerlo solo haz lo siguiente:
  1. Selecciona el código que escribiste en tu mensaje.
  2. Presiona el botón que tiene el logo que relacionamos con delphi (3 pilares y un techo color café), si posicionas el mouse sobre él, va a aparecer su "hint", que dice "Resaltar sintaxis delphi".
Responder Con Cita
  #6  
Antiguo 11-12-2006
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.289
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
Apoyo lo dicho por Albano.

Sobre el problema en cuestión, haz una prueba.
En el proyecto donde cargas el package (Form1), marca en las opciones del proywcto "Build with runtime packege" y prueba de nuevo.
__________________
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
  #7  
Antiguo 11-12-2006
ezindetgeio ezindetgeio is offline
Miembro
 
Registrado: dic 2006
Posts: 12
Poder: 0
ezindetgeio Va por buen camino
Hola:

Corregido lo del código. Perdón, no estoy muy habituado a foros.

He probado lo que me dice Neftali (aunque en principio va un poco con la filosofía de lo que quiero hacer puesto que se supone que es desde código donde le digo que cargue el paquete).

Aún así, marcando el checkbox y añadiendo el .bpl a pelo, no me funciona.

Muchas gracias por la ayuda que me prestáis.
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
Acceso a DLL aggg63 Varios 19 18-02-2013 19:49:54
Equivalencia a los bpls en .NET poliburro .NET 5 02-10-2006 21:21:49
Acceso a BD Danielle SQL 3 29-04-2006 07:40:20
Acceso a SP tgsistemas Conexión con bases de datos 1 14-09-2004 17:26:34
Creación de BPLs y DCPs GIVO Varios 1 19-06-2003 18:52:36


La franja horaria es GMT +2. Ahora son las 03:41:34.


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