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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2005
adlfv adlfv is offline
Miembro
 
Registrado: may 2005
Posts: 39
Poder: 0
adlfv Va por buen camino
Ayuda con paquetes por favor!!

Hola a todos.

Estoy vuelto un 8 con los paquetes ...

Voy a intentar explicar de la forma más clara, y lo mejor posible lo que quiero hacer... Espero que me explique bien...

Estoy haciendo una aplicación muy grande... y quiero partirla en paquetes. Tengo un DataModule (DMDatosZeos) donde residen todas las tablas, algunos querys y los datasources. Tengo otro DataModule (DMGlobal) donde residen algunos componentes no visuales que uso de forma global al programa, por ejemplo para el aspecto visual de los formularios (efectos en botones y cosas así…).

Los mantenimientos de las tablas (listados con filtros, modificaciones, eliminaciones y algunas inserciones) los he programado en un formulario "general" y todos los mantenimientos heredan de éste. Cada formulario de mantenimiento tiene un formulario de edición asociado, y éste también hereda de un formulario de edición "general". Básicamente para “personalizar” un mantenimiento, tengo que decirle qué DataSource es el asociado, y qué campos tiene y el resto es más o menos automático.

En el programa tengo un objeto global, llamado _BD, de tipo TBD, que encapsula al DataModule (DMDatosZeos) y algunos métodos para tratado de datos. (No encapsula a DMGlobal… eso es aparte)

Hasta aquí todo bien... Espero que todo se entienda.

Ahora, lo que quiero hacer es... Hacer un paquete para la base de datos (BD.bpl). Dicho paquete contendría la clase TBD, y el DataModule (DMDatosZeos) que es un campo de la clase. Adicionalmente en la misma unit de TBD, tengo también algunas rutinas para trabajar con datos. Recordemos en este punto que en el programa tengo un objeto “global” _BD de tipo TBD.

La pregunta es… Cómo hago para desde el ejecutable “importar” el objeto _BD?

En el paquete BD.bpl creo el objeto _BD al cargarlo, osea… hago algo tal que así…

Código:
 initialization
    RegisterClass(TBD);
    _BD := TBD.Create;

Y tengo una función BD que me devuelve el objeto en cuestión:


Código:
 function BD: TBD;
 begin
   Result := _BD;
 end;

Esta función está en UBD (donde está definido TBD, y se encuentra en la clausula contains de BD.bpl, osea… está en el paquete BD.bpl).

Lo que se me ocurrió fue, cargar el paquete y llamar a esta función que me devuelve el objeto desde el programa de la siguiente manera:


Código:
 procedure CargarPaqueteBD;
 type
   TVarBD = function: TBD;
 var
   Lib: String;
   H: HModule;
   FuncBD: TVarBD;
 begin
   Lib := ExtractFilePath(ParamStr(0)) + 'BD.bpl';
   if not FileExists(Lib) then
 	ShowMessage('No existe');
 
   H := LoadPackage(PChar(Lib));
   if H <> 0 then
   begin
 	@FuncBD := GetProcAddress(H, 'BD');
 	if not Assigned(FuncBD) then
 	  ShowMessage('FuncBD NO ASIGNADA!!!');
 	_BD := FuncBD;
   end
   else begin
 	ShowMessage('Error cargando');
   end;
   UnloadPackage(H);
 end;

El problema es que no funciona, siempre me dice “FuncBD NO ASIGNADA!!!”, pero sí logra cargar el paquete correctamente.

No se si me expliqué lo suficiente, tal vez confundí en lugar de aclarar…

En general, necesito desde el principal recibir el objeto _BD de BD.bpl, y luego enviárselo a todos los paquetes que dependan de la base de datos. Igual pasaría con el modulo de datos Global.

Por favor, realmente necesito ayuda con esto… Llevo semanas pensando y probando y todavía no logro dar con la solución…

Muchas gracias de antemano.

Un cordial saludo a todos, y disculpen si el post es muy grande.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 03:11:22.


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