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
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.
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
Re: Subproyectos
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.
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
http://www.bisoft.es
Re: Subproyectos
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
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
Re: Subproyectos
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.
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.
Re: Subproyectos
José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.
/*
* 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.
- ignacio
- Site Admin
- Mensajes: 9445
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Subproyectos
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
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
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com