Вы находитесь на странице: 1из 8

Multi-DLLs

Hoja 1

Porqu realizar un proyecto MULTI-DLLs? He ledo varias razones que contestan esta pregunta, pero voy a tratar de transmitir mi experiencia prctica. 1- Productividad. Si bien al principio cambiar la modalidad de trabajo nos resulta algo laborioso e incmodo, es una buena inversin. Abrir, buscar un procedimiento y/o compilar un app que tiene no mas de 60 procedimientos no es lo mismo que hacerlo con otro que tenga mas de 300! (hay proyectos mas grandes no?). 2- Reusabilidad. Si trabajamos con mdulos es comn tener varios apps cada uno con su respectivo exe. Sin DLLs es imposible compartir procedimientos, asi que la unica solucion es copiar procedures, o exportar-importar TXA. Esto implica que mantenimiento de dichos procedimientos resultar ms costoso. 3- Atomicidad: Si se modifica una APP solo debo actualizas la DLL en cuestin. Consejos prcticos: Comenzar con APPs desde cero, luego podr importar los procedimientos de mi app gigante. Tener un ambiente de desarrollo estable, en Cw55, solo tengo que tener en la carpeta c55\template aquellos que los voy a usar y que soportan compilacin del MULTI-DLL. Cw55 incluyen en la compilacin todos los archivos que estn en la carpeta template aun cuando no lo tengamos registrados. Esto suele ser una causa de error en la compilacin. A todos los procedures ponerles como prefijo o sufijo una distincin referente a la app a la que pertenece, de esa manera nos evitamos que existan procedimientos que se llamen igual. Esto puede no producir error en la compliacin, pero si en runtime. Por ejemplo. COMUN.APP (BRWProveedoresCM) AGENDA.APP (MainAgenda) Solo dejar como exportables aquellos procedimientos que sern llamados por otras APPs.

Multi-DLLs

Hoja 2

App de datos Application Properties

Global Properties

Procedimiento Dummy o como quieran llamarlo. Es conveniente poner el nombre del APP o sigla del APP a los procedimientos. Para este caso seria DummyDAT. Esto es porque en varios APPs agregaremos procedimiento Dummy

Multi-DLLs

Hoja 3

Extension Apps Datos: Se incluyen todos los globals de los templates que se usaran en las APPs de DLLs

Apps DLLs

Multi-DLLs

Hoja 4

Linkear DLL de datos, la App de datos debe ser compilada antes. vlido tambien para los procedures comunes.

Multi-DLLs

Hoja 5

Agregar un procedimiento relacionado al modulo de datos. Es necesario porque a veces los mdulos sin procedimientos son eliminados.

Multi-DLLs

Hoja 6

Seleccionar el modulo.

Procedures exportables. Clarion por defecto cuando el archivo a generar es DLL, propone para todos los nuevos procedimientos como exportables. Tenemos que dejar solamente los procedimientos que van a ser llamados por otros APPs

Multi-DLLs

Hoja 7

Al exportar un procedimiento (por ejemplo un BRW), de un APP, los procedimientos (FORM, RPT, etc.) que son llamados por el procedimiento BRW , tambin son accesibles. Veamos un ejemplo, el procedimiento W_TurnosAgenda tiene tildada la opcin Export Procedure.

Los procedimientos de abajo no necesitan tener marcado Export procedure, a menos claro que sea necesario (si queremos acceder a ellos sin pasar por W_TurnosAgenda) Para un proyecto multi dlls, es necesario jerarquizar las apps, o sea establecer un orden de compilacin. Vemos aqu un esquema de relaciones. Ingresos Datos

Funciones

Cuentas

Procedimientos comunes

Pagos

No es posible

Informes

Saldos

Veamos en particular la relacin entre Pagos y Saldos. Si Pagos tiene algn procedimiento incluido en Saldos, no podr incluir ningn procedimiento de Saldos en Pagos, de manera directa.

Multi-DLLs

Hoja 8

Para salvar esta imposibilidad, podemos hacer una DLLs de enlace. Esta DLLs de enlace debe tener la llamada a la DLLs de datos y a la DLLs a enlazar (para este caso Saldos). Luego se crea un procedimiento SOURCE, exportable, que llame al procedimiento de Saldos. Luego en Pagos se incluye la DLL de enlace y se llama al procedimiento. Por ejemplo si en Saldos hay un procedimiento: PagosNetos(long pProveedor,long pDFecha,long pHFecha),real En la app de enlace se debe crear un procedure con el mismo prototipo Enlace.PNetos(long pProveedor,long pDFecha,long pHFecha),real En el procedimiento source.
LOC:Retorno = PagosNetos(pProveedor, pDFecha, pHFecha) RETURN(LOC:Retorno)

Luego en Pagos podemos llamar sin problemas a PNetos de la DLL Enlace Pagos
Saldos.PagosNetos NO Enlace.PNeto - SI

Enlace
Saldos.PagosNetos

Saldos

Hasta aqu vimos cmo generar APPs de DLLs, pero ningn exe. Una alternativa es que los APPs ltimos (que no son llamados por ningn otro app) se compilen como EXEs. Esto tiene la limitacin que sus procedimientos no podrn ser incluidos en otros APPs. La opcin que uso yo, es compilar todos los APPs como DLLs, poner los MainMenu como exportables. Luego crear un nuevo APP que se compile como EXE, incluir la APP que tiene el MainMenu, y llamarlo mediante un procedimiento SOURCE.

Вам также может понравиться