Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-02-2015
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
La situación es sumamente simple y le están dando demasiadas vueltas.
Uno de mis sistemas más complejos tiene 72 formularios (sin contar principal, opciones, etc), y precisamente la que comentas es la que creo yo que es la mejor forma de gestionar las ventanas.

1, plantéate el uso de bpl’s en lugar de dll’s, la razón es que los bpl’s son exactamente iguales a las dll’s, solo que añaden el uso de RTTI y son un poco más estables al cargar y descargar de memoria (con la única desventaja de no ser estándar, es decir solo tu aplicación u otra aplicación Builder/Delphi, podrán consumirla).

2, en la dll o bpl, crea una unit (.cpp,.h), en la que contendrás las funciones que se exportaran e iniciaran los formularios, también estas pueden recibir parámetros o punteros de la BD, por ejemplo (a costa de la estandarización, cosa que no te debe preocupar si tu aplicación será la única que consuma la dll/bpl).
Cada función debe ser declarada en él .h de la siguiente manera:

Código:
extern "C" __declspec( dllexport )void __stdcall miFuncionDLL( TIBDatabase *punteroEjemplo );
Puedes buscar más información de que significa cada palabra, pero a grandes rasgos, estas declarando una función estándar que las otras aplicaciones podrán llamar, estas funciones son tal cual las funciones normales, es decir pueden devolver cualquier valor que requieras (otra vez a costa de la estandarización), o recibir cualquier cosa que requieras.

2.1, ya dentro de esta función creas el formulario y le pasas lo que necesites, en este caso “punteroEjemplo” que es el puntero del componente de la BD con el que se conectara tu componente de tabla o query.

3, ya en la aplicación principal en cualquier evento de botón va el siguiente código:

Código:
void __fastcall TForm1::Boton1Click(TObject *Sender)
{
	String rutaDLL = "mi ruta de dll";

	HINSTANCE li =
		FileExists( rutaDLL ) ? //comprobamos que la dll exista
		LoadLibrary( rutaDLL.c_str() ) //si existe cargamos la dll dinamicamente, para cargar un bpl, seria con LoadPackage
		:
		NULL; // si no existe devolvemos un NULL y no entraria en el siguiente bloque

	if ( li != NULL ) {
		typedef void ( __stdcall* fsFuncion )( TIBDatabase *punteroEjemplo ); //definimos el tipo fsFuncion el cual sera un puntero a una funcion con la misma estructura que la de la dll
		fsFuncion miPunteroFuncion = ( fsFuncion )GetProcAddress( li, "miFuncionDLL" ); //declaramos, buscamos "miFuncionDLL" y asignamos la funcion de la dll en el puntero "miPunteroFuncion" de tipo "fsFuncion"

		if ( miPunteroFuncion != NULL ) //si miPunteroFuncion apunta a una funcion real, la ejecuto, y le paso lo que nesesite, y en caso de que devuelva algo lo recibo
			miPunteroFuncion( punteroAMiBD );

		FreeLibrary( li ); //en caso de que ya hayamos terminado con el formulario y hayamos liberado TODOS los punteros que hallamos iniciado en ese formulario, se libera la dll
	}
}
Pd. Esto debería compilar sin problemas, cualquier cosa comenta.
Responder Con Cita
  #2  
Antiguo 25-02-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por _cero_ Ver Mensaje
La situación es sumamente simple y le están dando demasiadas vueltas.
Uno de mis sistemas más complejos tiene 72 formularios (sin contar principal, opciones, etc), y precisamente la que comentas es la que creo yo que es la mejor forma de gestionar las ventanas.
Creo que alguien sugirió antes, y preguntó, si crea todos los forms al comienzo o si los va creando según se van necesitando. Me parece que no he visto la respuesta a esa pregunta.
Alguna vez he comentado en algún mensaje que el último programa en el que estuve trabajando tenía cerca de mil formularios (1000) y no tenía ningún problema para funcionar en cualquier pc normal y corriente.
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
ejecutables mas pequeños sidneyb Varios 11 01-10-2008 15:46:48
como creo ejecutables para windows vista yack99281588 Varios 2 20-09-2008 01:10:17
Qué componente del Qreport debo utilizar para lograr esto? LizdR Impresión 3 21-06-2008 23:12:16
Icono mostrados muy pequeños Coco_jac OOP 2 14-07-2005 03:58:51
Para los pequeños saltamontes santana Humor 2 20-01-2004 23:41:02


La franja horaria es GMT +2. Ahora son las 00:15:09.


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