In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Subproyectos

Foro de Xailer profesional en español
Responder
PacoGomis
Mensajes: 21
Registrado: Sab Sep 19, 2015 9:10 am
Ubicación: Alicante

Subproyectos

Mensaje por PacoGomis »

Hola alguien me puede indicar, como funcionan los subproyectos ?. He intentado añadir como al proyecto del ejemplo de Sample/DLLTest el subproyecto CodeInDll, poniéndole en las propiedades del proyecto tipo lib, y añadiendo a DllTest,REQUEST TFormInDLL. Al ejecutar el ejemplo "run code"
TFORMINDLL(0)
Error BASE/1001 Undefined function: TFORMINDLL
Argumentos: ()
Gracias
Avatar de Usuario
bingen
Mensajes: 581
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: Subproyectos

Mensaje por bingen »

Hola Paco, los subproyectos son proyectos completos que podrías compilar por separado y que se unen a un proyecto principal.

Un subproyecto puede tener distintos contenidos, yo por ejemplo tengo uno que son solo las funciones generales que uso en todas las Apps y asi cada nuevo proyecto que arranco le añado este subproyecto, tengo otra que es la DLL de todos los Iconos que uso en general en todas las Apps y lo mismo la añdo y listo, luego tengo un subproyecto con los Prgs+Xfms para la gestión documental que lo añado si la APp lo va a necesitar, etc.

Como puedes ver unos son de tipo LIB y el de los iconos de tipo DLL, ya que de tipo EXE solo puede ser el proyecto principal, logicamente.

Y a partir de que lo compiles puedes usar las funciones, las clases y los métodos de los subproyectos directamente si tener que hacer nada más, es como si fueran parte del proyecto principal.

Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
PacoGomis
Mensajes: 21
Registrado: Sab Sep 19, 2015 9:10 am
Ubicación: Alicante

Re: Subproyectos

Mensaje por PacoGomis »

Gracias, tenia entendido que lo podía tener en el IDE, dentro del proyecto y que al compilar, se añadían al EXE, SIN NECESIDAD DE INCLUIR LA LIB o DLL, según jfgimenez,
En general, el funcionamiento del "multiproyecto" es el siguiente:
- Cada vez que se va a compilar, Xailer comprueba si el proyecto principal
tiene algún subproyecto. Si es así­, compila primero los subproyectos.
- Este proceso lo hace de forma recursiva, es decir, si un subproyecto
contiene a su vez subproyectos, estos últimos se compilan primero.
- Si un subproyecto es de tipo "lib", entonces se enlazará a su proyecto
"padre"; exactamente igual que si se añadiera la librerí­a directamente al
proyecto "padre".
En todas las pruebas que he intentado hacer con Samples/DllText y poniendo las propiedades del subproyecto CodeInDll en tipo LIB, al ejecutar la aplicación no me reconoce la función TFORMINDLL, que tengo en el subproyecto
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Subproyectos

Mensaje por jfgimenez »

Paco,

cuando hay una función, procedure, clase, etc., en una DLL y la quieres llamar desde el EXE, tienes que declarar su nombre en el EXE con el comando DYNAMIC (p.ej.: "DYNAMIC TMiForm1, MiFuncion1, MiProcedure1"). Ese comando lo puedes poner en cualquier sitio del EXE, y es sólo una declaración para el enlazador; en realidad no ejecuta ningún código.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
PacoGomis
Mensajes: 21
Registrado: Sab Sep 19, 2015 9:10 am
Ubicación: Alicante

Re: Subproyectos

Mensaje por PacoGomis »

jfgimenez escribió:Paco,

cuando hay una función, procedure, clase, etc., en una DLL y la quieres llamar desde el EXE, tienes que declarar su nombre en el EXE con el comando DYNAMIC (p.ej.: "DYNAMIC TMiForm1, MiFuncion1, MiProcedure1"). Ese comando lo puedes poner en cualquier sitio del EXE, y es sólo una declaración para el enlazador; en realidad no ejecuta ningún código.
José
/*
* Proyecto: DllTest
* Fichero: Form1.prg
* Descripción:
* Autor:
* Fecha: 13/01/2009
*/

#include "Xailer.ch"
request tcdxdatasource, Tdbfdataset, TDbBrowse
DYNAMIC TFormInDLL

CLASS TForm1 FROM TForm

COMPONENT oButton1
COMPONENT oSplitter1
COMPONENT oPanel1

METHOD CreateForm()
METHOD Button1Click( oSender )
ENDCLASS

#include "Form1.xfm"

//------------------------------------------------------------------------------

METHOD Button1Click( oSender ) CLASS TForm1
LOCAL nHandle
// nHandle := HB_LibLoad( "Codeindll.dll" )
TFormInDLL():New(Self):ShowModal()
// HB_LibFree( nHandle )
RETURN Nil

El subproyecto CodeInDll cuando lo compilo como DLL, al ejecutar el programa me aparece
TFORMINDLL(0)
Error BASE/1001 Undefined function: TFORMINDLL
Argumentos: ()
a pesar de que tiene puesto DYNAMIC TFormInDLL
Si lo compilo como LIB y le pongo REQUEST TFomInDll, y borro el Lib que genera al compilar, funciona, pero no sale el archivo de imagen.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9445
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Subproyectos

Mensaje por ignacio »

Buenos días,

Comprueba que la DLL se ha creado correctamente y que se encuentra en el directorio del ejeuctable Dlltest.exe. También es recomendable reconstruir completamente el proyecto de la DLL. Acabo de probar el ejemplo con Xailer 4 y funciona correctamente.

Un saludo
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder