Page 1 of 1

No puedo usar dlls

Posted: Thu Jun 21, 2007 5:49 pm
by diegopolverelli
Hola; acabo de adquirir FWH; quiero migrar una aplicacion que corria perfectamente en clipper con FW28/Blinker con una DLL externa y no puedo; probe con el programa rc2dll32 y escribiendo SET RESOURCES TO y el nombre de la nueva dll y nada, probe linkeando directamente con el .RC y con el .RES y tampoco. En los ultimos 2 casos el .exe se genera correctamente, pero al ejecutar, el programa no abre el dialogo; si uso la dll supuestamente de 32 bits (porque una vez convertida no puedo abrirla con el Resource Workshop), me da un error al ejecutar.
Probe tambien abriendo el Screen32.dll que ustedes incluyen en el FWH, y abriendo la DLL 16 bits, le fui pasando los dialogos que necesito, y guarde, como DLL, como RC y como RES, y tampoco obtengo resultados. Ademas, no se en cual de los samples puedo encontrar un ejemplo de uso de DLL's.
Uno de los samples que parece usar DLL's es el TestRes, cuando le corro el buildh, sale el siguiente error: TESTRES.EXE imagen Incorrecta; La aplicacion o Dll C:\FHW\samples\TestRes.dll no es una imagen válida de Windows. Compruebe esto contra su disquette de instalación.
Ese mismo cartel era uno de los que me arrojaba mi aplicacion si usaba el Set Resources to "mydllpasadaa32".

¿me podrían dar una mano? Gracias. Atte

Diego

Posted: Thu Jun 21, 2007 6:57 pm
by Antonio Linares
Diego,

Usas controles propios de Borland en tus dialogos ?

Que error te aparece al intentar abrir un diálogo ?

Posted: Thu Jun 21, 2007 7:31 pm
by diegopolverelli
CREO QUE SI; ESO ES DEFINIR BOTONES DONDE 1 ES OK, 2 ES CANCELL, ETC??? SI ES ESO USO; Y ERRORES SON VARIOS, SEGUN COMO TRATE DE LEVANTAR LA DLL; IGUAL, FIJATE EN EL DEL SAMPLES (EL ERROR QUE TE COMENTO EN EL PRIMER MENSAJE QUE ME DA AL COMPILAR UNO DE LOS PRG'S DE LA CARPETA SAMPLES); ESE ERROR QUE TIRA DE LA DLL, SI PUEDO HACER ANDAR ESE EJEMPLO, DESPUES TRATO DE PASAR MI DLL A ALGO COMO ESO, O BIEN PARTO DE ESA Y VOY AGREGANDO LO QUE NECESITO.

Posted: Thu Jun 21, 2007 7:34 pm
by Antonio Linares
Diego,

En caso de usar controles de Borland tienes que incluir estas líneas en tu programa:

Code: Select all

   ... 
   local hBorland := LoadLibrary( "BWCC32.DLL" ) 
    
   BWCCRegister( GetResources() ) 

   ... (el código de tu aplicación) 

   FreeLibrary( hBorland ) 

return nil 

DLL32 FUNCTION BWCCRegister( hInst AS LONG ) AS WORD PASCAL LIB "BWCC32.DLL"
y tener BWCC32.DLL en donde esté tu aplicación

Posted: Thu Jun 21, 2007 7:40 pm
by diegopolverelli
ESA FUNCION LA TENGO; LA ENCONTRE INVESTIGANDO PAGINAS DE HARBOUR/FVH;


LOCAL HDLL1:=LOADLIBRARY("BWCC32.DLL")

BWCCREGISTER(GETRESOURCES())

// -------------------------------------------------
DLL32 FUNCTION BWCCREGISTER(HINST AS LONG) AS WORD PASCAL LIB "BWCC32.DLL"
PROCEDURE APPSYS
RETURN

ES LO MISMO...

Posted: Thu Jun 21, 2007 8:27 pm
by Antonio Linares
Diego,

Revisa el ejemplo samples\FwBorl.prg que está diseñado para 16 y 32 bits. Puedes encontrar la DLL de 32 bits y el fichero RC usado para crearla.

El ejemplo TestRes.prg no está adaptado a 32 bits

Posted: Mon Jun 25, 2007 1:20 pm
by diegopolverelli
Espectacular. Con ese ejemplo ya hice funcionar mi programa; Mil gracias. Lo que deberían indicar en el manual, como sugerencia, cuando tocan el tema de uso de dlls propias, es ese ejemplo que me pasaste (el fwborl.prg), dado que con el registo de la dll no alcanza, sino que por lo que veo tenes que hacer el set resource debajo apuntando a la dll que tenes armada. Gracias. Atte.

Antonio Linares wrote:Diego,

Revisa el ejemplo samples\FwBorl.prg que está diseñado para 16 y 32 bits. Puedes encontrar la DLL de 32 bits y el fichero RC usado para crearla.

El ejemplo TestRes.prg no está adaptado a 32 bits

Posted: Mon Jun 25, 2007 3:29 pm
by diegopolverelli
Hola. Yo de nuevo; sabes que probé todo, y creo que lo único que no me funciona con respecto a la dll vieja que usaba en 16 bits es el tema de los folders; yo tengo un dialogo con un folder, y despues en el .prg hago un redefine de ese folder, y le meto en prompts 2 titulos, por ej, y en DIALOGS otros 2 dialogos de mi dll; cuando compilo funciona todo OK, pero al ejecutar, donde tendria que estar la carpeta me muestra un cuadro sin solapas, donde solamente figura el 1er dialogo que defini en la lista de DIALOGS; ese funciona perfecto, le funcionan los botones, cuadros de texto, etc. pero al no tener las solapas, no puedo acceder al 2° dialogo. Me fije en el folder.prg del SAMPLES, pero no usa folders de un recurso externo (dll). ¿tenes idea que puede estar pasando? o si no, ¿hay alguno de los prg's de la carpeta SAMPLES que tenga un ejemplo de como usar folders definidas desde una DLL? Gracias de nuevo. Atte.



diegopolverelli wrote:Espectacular. Con ese ejemplo ya hice funcionar mi programa; Mil gracias. Lo que deberían indicar en el manual, como sugerencia, cuando tocan el tema de uso de dlls propias, es ese ejemplo que me pasaste (el fwborl.prg), dado que con el registo de la dll no alcanza, sino que por lo que veo tenes que hacer el set resource debajo apuntando a la dll que tenes armada. Gracias. Atte.

Antonio Linares wrote:Diego,

Revisa el ejemplo samples\FwBorl.prg que está diseñado para 16 y 32 bits. Puedes encontrar la DLL de 32 bits y el fichero RC usado para crearla.

El ejemplo TestRes.prg no está adaptado a 32 bits

Posted: Mon Jun 25, 2007 3:39 pm
by Antonio Linares
En 32 bits tienes que usar "SysTabControl32" en vez de "TFolder" en tus recursos

Posted: Tue Jun 26, 2007 3:49 pm
by diegopolverelli
Fantastico; funciono perfecto; tengo otra duda; esta es medio rara; ejecuto un programa, me abre un dialogo con un browse, le doy 2 clic al browse y me tira un error: cannont create dialog_box y el nombre del dialogo "art_alt" (que esta dentro de una dll al igual que el dialogo inicial con el browse); ahora, si antes de dar 2 click toco un boton que dispara un MSGGET ("algo","algo",@nombre,"lupa.bmp"), y despues de cerrar el cuadrito que aparece hago los 2 click, ahi si me muestra perfecto el 2° dialogo; es rarisimo. ¿me explico? abro un dialogo que esta dentro de una dll, abro otro dialogo que se dispara desde esta ventana, y funciona solamente si antes ejecuto el MSGGET, si no da el error de que no puede crear el recurso. ¿tenes idea que puede ser? Gracias.


otro mas, me di cuenta que las fechas andan mal: es asi; yo definia una variable, por ej xfecha, la inicializab xfecha=date() y despues hacia un Redefine GET var xfecha... etc... ahora si bien parece estar todo OK, cuando escribo la fecha no me respeta los "-" que separan dia de mes, etc; ¿hay algun picture para agregar o algo asi? si no decime donde hay algun ejemplo de get donde se pida una variable de tipo fecha. Gracias.
Antonio Linares wrote:En 32 bits tienes que usar "SysTabControl32" en vez de "TFolder" en tus recursos

Posted: Tue Jun 26, 2007 5:41 pm
by Antonio Linares
> dialogo "art_alt"

Que controles tiene ese diálogo ? Copia aqui la porción del RC correspodiente a ese diálogo

Posted: Tue Jun 26, 2007 5:48 pm
by diegopolverelli
aca va el codigo:

ART_ALT DIALOG LOADONCALL MOVEABLE DISCARDABLE -38, 16, 400, 308
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Pantalla de alta de articulo"
FONT 8, "MS Sans Serif"
{
EDITTEXT 109, 41, 5, 88, 13, ES_UPPERCASE | ES_READONLY | WS_BORDER | WS_TABSTOP
EDITTEXT 111, 204, 5, 189, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 113, -131, 65, 37, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 119, -131, 81, 37, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 115, -131, 97, 37, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 116, -121, 131, 42, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 117, -121, 147, 42, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
CONTROL "", 1, "BorBtn", 1 | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 158, 281, 37, 25
CONTROL "", 2, "BorBtn", 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 205, 281, 37, 25
LTEXT "Número:", -1, 8, 6, 34, 9, SS_SIMPLE | WS_GROUP
LTEXT "Descripcion:", -1, 160, 6, 43, 9, SS_SIMPLE | WS_GROUP
LTEXT "Linea:", -1, 8, 25, 30, 9, SS_SIMPLE | WS_GROUP
LTEXT "Proveedor:", -1, 160, 44, 38, 9, SS_SIMPLE | WS_GROUP
LTEXT "Valor Unitario:", -1, -194, 66, 49, 9, SS_SIMPLE | WS_GROUP
LTEXT "% Margen:", -1, -193, 82, 36, 9, SS_SIMPLE | WS_GROUP
LTEXT "Precio Venta:", -1, -196, 98, 46, 9, SS_SIMPLE | WS_GROUP
CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE, -203, 61, 191, 52
LTEXT "Fecha de Vigencia:", -1, -194, 132, 70, 9, SS_SIMPLE | WS_GROUP
CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE, -200, 127, 134, 52
LTEXT "Embalado:", -1, -194, 148, 70, 9, SS_SIMPLE | WS_GROUP
LTEXT "Iva 21 o 10,5", -1, -194, 164, 70, 9, SS_SIMPLE | WS_GROUP
PUSHBUTTON "Aplicar", 120, -89, 80, 42, 14
EDITTEXT 114, 478, 132, 29, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
LTEXT "Cant. Stock:", -1, 436, 134, 38, 9, SS_SIMPLE | WS_GROUP
COMBOBOX 112, 204, 40, 188, 124, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Cuenta de Compras:", -1, 211, 85, 68, 9, SS_SIMPLE | WS_GROUP
EDITTEXT 121, 279, 83, 41, 12
CONTROL "", 107, "TBitMap", 0 | WS_CHILD | WS_VISIBLE, 435, 352, 11, 12
CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE, 207, 78, 188, 22
LTEXT "Cuenta de Ventas:", -1, 12, 85, 62, 9, SS_SIMPLE | WS_GROUP
EDITTEXT 122, 75, 83, 41, 12
CONTROL "", 123, "TBitMap", 0 | WS_CHILD | WS_VISIBLE, 411, 353, 11, 12
CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE, 8, 78, 189, 22
EDITTEXT 129, -216, 205, 51, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 130, -120, 205, 35, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
LTEXT "Moneda:", -1, -151, 207, 30, 9, SS_SIMPLE | WS_GROUP
LTEXT "Precio:", -1, -247, 207, 33, 9, SS_SIMPLE | WS_GROUP
CONTROL "", -1, "BorShade", 2 | WS_CHILD | WS_VISIBLE, 11, 108, 379, 3
LTEXT "Precios de listas:", -1, -420, 193, 135, 9, SS_SIMPLE | WS_GROUP
LTEXT "Lista:", -1, -419, 207, 22, 9, SS_SIMPLE | WS_GROUP
EDITTEXT 124, -121, 163, 42, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
COMBOBOX 108, -395, 205, 137, 86, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "", -1, "BorShade", 2 | WS_CHILD | WS_VISIBLE, 12, 145, 378, 1
LTEXT "Unidad de medida (Stock)", -1, 11, 115, 91, 9, SS_SIMPLE | WS_GROUP
LTEXT "Unidad de Facturacion", -1, 22, 132, 81, 9, SS_SIMPLE | WS_GROUP
COMBOBOX 125, 101, 129, 57, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
COMBOBOX 126, 101, 112, 57, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "", -1, "BorShade", 2 | WS_CHILD | WS_VISIBLE, -384, 395, 377, 3
LTEXT "Control de Stock:", -1, -387, 344, 65, 9, SS_SIMPLE | WS_GROUP
LTEXT "Stock Minimo:", -1, -386, 365, 47, 9, SS_SIMPLE | WS_GROUP
LTEXT "Stock Maximo:", -1, -294, 365, 54, 9, SS_SIMPLE | WS_GROUP
LTEXT "Punto de Pedido:", -1, -191, 364, 54, 9, SS_SIMPLE | WS_GROUP
EDITTEXT 127, -240, 361, 30, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 128, -133, 361, 30, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 131, -336, 362, 30, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
CHECKBOX "Habilitado para Ventas", 132, 9, 62, 86, 12, BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "Materia Prima", 133, 240, 62, 57, 11, BS_AUTOCHECKBOX | WS_TABSTOP
CHECKBOX "Habilitado para Compras", 134, 306, 61, 90, 12, BS_AUTOCHECKBOX | WS_TABSTOP
COMBOBOX 110, -358, 42, 114, 125, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Graba", 118, -81, 204, 44, 14
CHECKBOX "Producto stockeable", 135, -318, 343, 79, 11, BS_AUTOCHECKBOX | WS_TABSTOP
COMBOBOX 136, -89, 97, 59, 57, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "...", 137, 119, 82, 15, 13
PUSHBUTTON "...", 138, 323, 82, 15, 13
EDITTEXT 139, 138, 83, 54, 12
EDITTEXT 140, 342, 83, 50, 12
CHECKBOX "Edita la descripcion al operar", 141, -231, 342, 108, 12, BS_AUTOCHECKBOX | WS_TABSTOP
LTEXT "Rubro:", -1, 8, 43, 30, 9, SS_SIMPLE | WS_GROUP
COMBOBOX 142, 41, 40, 114, 125, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Unidad de secundaria", -1, 163, 115, 72, 9, SS_SIMPLE | WS_GROUP
COMBOBOX 143, 239, 112, 57, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Factor Conversion", -1, 300, 115, 60, 9, SS_SIMPLE | WS_GROUP
EDITTEXT 144, 363, 112, 30, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
EDITTEXT 145, 41, 22, 37, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
PUSHBUTTON "...", 146, 83, 22, 15, 13
EDITTEXT 147, 103, 22, 177, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
CHECKBOX "Producción", 148, 113, 62, 48, 11, BS_AUTOCHECKBOX | WS_TABSTOP
PUSHBUTTON "Formula", 149, 165, 61, 44, 14
LTEXT "Dias Entrega:", -1, -85, 364, 46, 9, SS_SIMPLE | WS_GROUP
EDITTEXT 150, -35, 361, 30, 13, ES_UPPERCASE | WS_BORDER | WS_TABSTOP
CONTROL "", 154, "SysTabControl32", 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 157, 384, 114
}




Using keyboard-interactive authenticat

Antonio Linares wrote:> dialogo "art_alt"

Que controles tiene ese diálogo ? Copia aqui la porción del RC correspodiente a ese diálogo

Posted: Wed Jun 27, 2007 5:15 pm
by diegopolverelli
Hola. ¿pudiste ver que era lo del ART_ALT? ademas, ¿me podes indicar un ejemplo donde se usen get's definidos en una dll externa para ingresar una fecha? o si hay que poner algun PICTURE, o similar. En samples hay un programa llamado datetime.prg, pero no usa dlls, y usa una clase dtpicker. ¿tenes idea como hay que definir el combo en la dll para luego asignarle un dtpicker?, por ej., lo del folder que ahora se poner "SYSTAB32" o algo asi en lugar de "Tfolder". Gracias. Atte.

Disculpá que te jorobe tanto, pero me funcióno todo (y tengo una aplicación bastante grossa) y solamente me falta esto, para ponerla operativa. Gracias...!!!
Antonio Linares wrote:> dialogo "art_alt"

Que controles tiene ese diálogo ? Copia aqui la porción del RC correspodiente a ese diálogo

Posted: Mon Jul 02, 2007 1:12 pm
by diegopolverelli
Hola; gracias, ya encontre lo que era; tenia un recurso definido como "tbitmap"; encima lo tenia y no lo estaba usando; lo saque y funciono perfecto. Gracias.


diegopolverelli wrote:Hola. ¿pudiste ver que era lo del ART_ALT? ademas, ¿me podes indicar un ejemplo donde se usen get's definidos en una dll externa para ingresar una fecha? o si hay que poner algun PICTURE, o similar. En samples hay un programa llamado datetime.prg, pero no usa dlls, y usa una clase dtpicker. ¿tenes idea como hay que definir el combo en la dll para luego asignarle un dtpicker?, por ej., lo del folder que ahora se poner "SYSTAB32" o algo asi en lugar de "Tfolder". Gracias. Atte.

Disculpá que te jorobe tanto, pero me funcióno todo (y tengo una aplicación bastante grossa) y solamente me falta esto, para ponerla operativa. Gracias...!!!
Antonio Linares wrote:> dialogo "art_alt"

Que controles tiene ese diálogo ? Copia aqui la porción del RC correspodiente a ese diálogo

Posted: Mon Jul 02, 2007 5:02 pm
by Antonio Linares
bien :-)