Página 1 de 1
Subproyectos
Publicado: Jue Feb 25, 2016 7:28 pm
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
Re: Subproyectos
Publicado: Sab Feb 27, 2016 2:35 pm
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.
Re: Subproyectos
Publicado: Mar Mar 01, 2016 1:45 pm
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
Re: Subproyectos
Publicado: Mar Mar 01, 2016 2:17 pm
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.
Re: Subproyectos
Publicado: Mar Mar 01, 2016 7:47 pm
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.
Re: Subproyectos
Publicado: Mié Mar 02, 2016 10:09 am
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