Migrando de FWH 32 a FWH 64 - windows.h
Re: Migrando de FWH 32 a FWH 64 - windows.h
El error de quedarse colgado al salir del programa ha vuelto a reproducirse, no se que ha pasado de ayer a hoy porque no hemos tocado nada de código. Incluso aun comentando línea por línea o toda la EXIT PROCEDURE KillApp() entera se queda colgado al salir.
Necesito que me orientes para depurar este problema que en 32 bits no aparece porque no se como.
Lo único que he encontrado es que cuando el windows me remite a depurar con el VSC me sale una pantalla en la que me da el nombre del programa con un número. Suponiendo que ese número correspondiera con un número de línea del programa resulta referirse a una instrucción sysrefresh().
Necesito que me orientes para depurar este problema que en 32 bits no aparece porque no se como.
Lo único que he encontrado es que cuando el windows me remite a depurar con el VSC me sale una pantalla en la que me da el nombre del programa con un número. Suponiendo que ese número correspondiera con un número de línea del programa resulta referirse a una instrucción sysrefresh().
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: Migrando de FWH 32 a FWH 64 - windows.h
Hola;
Aquí puedes ver usando las funciones nativas de Harbour / xHarbour la forma de saber si hay conexión a Internet:
PROCEDURE Main
LOCAL pSocket
INetInit()
pSocket := INetConnect( "www.xharbour.com", 80 )
? INetAddress( pSocket ) // result: 193.239.210.10
INetClose( pSocket )
INetCleanUp()
RETURN
Espero que te sirva.
Aquí puedes ver usando las funciones nativas de Harbour / xHarbour la forma de saber si hay conexión a Internet:
PROCEDURE Main
LOCAL pSocket
INetInit()
pSocket := INetConnect( "www.xharbour.com", 80 )
? INetAddress( pSocket ) // result: 193.239.210.10
INetClose( pSocket )
INetCleanUp()
RETURN
Espero que te sirva.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Migrando de FWH 32 a FWH 64 - windows.h
Paz,
Te falta incluir este include en tu fichero en C:
#include <hbapifs.h>
No uses un EXIT procedure, no hace falta y de ahí puede venir el problema.
Cualquier limpieza que quieras hacer hazla tras el ACTIVATE WINDOW ... del PRG principal y verás como no tienes ningún problema
Te falta incluir este include en tu fichero en C:
#include <hbapifs.h>
No uses un EXIT procedure, no hace falta y de ahí puede venir el problema.
Cualquier limpieza que quieras hacer hazla tras el ACTIVATE WINDOW ... del PRG principal y verás como no tienes ningún problema
- lucasdebeltran
- Posts: 1303
- Joined: Tue Jul 21, 2009 8:12 am
- Contact:
Re: Migrando de FWH 32 a FWH 64 - windows.h
Paz,
Veo que estás usando dlls de 32 bits y en 64 bits no es posible:
//freelibrary("nviewlib.dll")
//freelibrary("avicap32.dll")
Tampoco Fast Report funciona en 64 bits.
Veo que estás usando dlls de 32 bits y en 64 bits no es posible:
//freelibrary("nviewlib.dll")
//freelibrary("avicap32.dll")
Tampoco Fast Report funciona en 64 bits.
Muchas gracias. Many thanks.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Un saludo, Best regards,
Harbour 3.2.0dev, Borland C++ 5.82 y FWH 13.06 [producción]
Implementando MSVC 2010, FWH64 y ADO.
Abandonando uso xHarbour y SQLRDD.
Re: Migrando de FWH 32 a FWH 64 - windows.h
Antonio, tengo incluido ese include. Creo que no lo has visto. Está en la lista de includes justo debajo de #PRAGMA BEGINDUMP.
Otra forma de eliminar esos warnings para fopen y otras funciones "standard" de C con VSC2013 es incluir las siguientes líneas en el código C:
Otra forma de eliminar esos warnings para fopen y otras funciones "standard" de C con VSC2013 es incluir las siguientes líneas en el código C:
Code: Select all
#pragma warning(disable: 4996)
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Migrando de FWH 32 a FWH 64 - windows.h
Paz,
Es que has escrito hb_fsopen() y en realidad es hb_fsOpen()
Cámbialo y vuelve a compilarlo
Es que has escrito hb_fsopen() y en realidad es hb_fsOpen()
Cámbialo y vuelve a compilarlo
Re: Migrando de FWH 32 a FWH 64 - hb_fsOpen() fopen() en C
Antonio, con la O mayúscula lo acepta.
Pero por dejar documentado el cambio completo que ha sido necesario:
Para usar hb_fsOpen() en vez de fopen() además de añadir en los includes #include <hbapifs.h> y #include <fileio.ch>, hay que hacer una conversión de tipo para hb_fsOpen() para evitar otro warning.
De modo que si el código original con fopen() era por ejemplo:
La versión con hb_fsOpen() debe de escribirse:
Sin esto, al compilar, nos da el siguiente error:
Y no obstante, no estoy seguro de si además sería conveniente hacer una conversión de tipos de las variables que se le pasan a hb_fsOpen(), pues creo que el prototipo de esta función es: hb_fsOpen( BYTE * pszFileName, USHORT uiFlags ) --> ( FHANDLE )hResult
y tengo dudas de que si la variable "nombre" apunta a una matriz de 12 posiciones (que es lo que usamos en el primer parámetro de la función fopen) esto sea lo mismo en tamaño que un puntero tipo BYTE (que es el primer parámetro de hb_fsOpen).
Pero por dejar documentado el cambio completo que ha sido necesario:
Para usar hb_fsOpen() en vez de fopen() además de añadir en los includes #include <hbapifs.h> y #include <fileio.ch>, hay que hacer una conversión de tipo para hb_fsOpen() para evitar otro warning.
De modo que si el código original con fopen() era por ejemplo:
Code: Select all
FILE *fichero;
char nombre[12] = "LISTFTP.DAT";
fichero = fopen( nombre, "w" );
Code: Select all
FILE *fichero;
char nombre[12] = "LISTFTP.DAT";
fichero = (FILE *) hb_fsOpen( nombre, FO_WRITE );
Code: Select all
internet.prg(461) : warning C4047: '=' : 'FILE *' differs in levels of indirection from 'HB_FHANDLE'
y tengo dudas de que si la variable "nombre" apunta a una matriz de 12 posiciones (que es lo que usamos en el primer parámetro de la función fopen) esto sea lo mismo en tamaño que un puntero tipo BYTE (que es el primer parámetro de hb_fsOpen).
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Migrando de FWH 32 a FWH 64 - windows.h
Paz,
Esas 3 líneas las podrías agrupar en una sola:
FILE * fichero = ( FILE *) hb_fsOpen( "LISTFTP.DAT", FO_WRITE );
Esas 3 líneas las podrías agrupar en una sola:
FILE * fichero = ( FILE *) hb_fsOpen( "LISTFTP.DAT", FO_WRITE );
Re: Migrando de FWH 32 a FWH 64 - windows.h
Hecho. Queda mejor!!!
Me queda ver lo del cuelgue de la salida del programa que no termina de salir bien y quedará terminado el paso a 64 bits.
A ver si mañana se me da mejor porque hoy no termino de dar con el problema, a pesar de haber reestructurado el proceso de cierre para ponerlo todo antes del oWnd:end() siendo oWnd el objeto ventana principal de la aplicación.
Me queda ver lo del cuelgue de la salida del programa que no termina de salir bien y quedará terminado el paso a 64 bits.
A ver si mañana se me da mejor porque hoy no termino de dar con el problema, a pesar de haber reestructurado el proceso de cierre para ponerlo todo antes del oWnd:end() siendo oWnd el objeto ventana principal de la aplicación.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Migrando de FWH 32 a FWH 64 - windows.h
Paz,
Lo que quieras cerrar, liberar, etc. hazlo despues del ACTIVATE WINDOW oWnd principal.
Es el lugar correcto
Lo que quieras cerrar, liberar, etc. hazlo despues del ACTIVATE WINDOW oWnd principal.
Es el lugar correcto
Re: Migrando de FWH 32 a FWH 64 - windows.h
Antonio,
Para tratar de aislar el cuelgue de la aplicación al salir he llegado a eliminar, para intentar aislar el problema, todo el proceso de cierre. Dejándolo exclusivamente en un oWnd:end(), donde oWnd es la ventana principal del programa.
Compilada en 32 bits con bcc63 no se cuelga al salir, pero en 64 con VSC 2013 si.
No se por donde puedo continuar para aislar el problema.
Por si puede ayudar utilizo 2 timers en la aplicación (no creo que tenga nada que ver pero lo dejo dicho por si acaso).
Para tratar de aislar el cuelgue de la aplicación al salir he llegado a eliminar, para intentar aislar el problema, todo el proceso de cierre. Dejándolo exclusivamente en un oWnd:end(), donde oWnd es la ventana principal del programa.
Compilada en 32 bits con bcc63 no se cuelga al salir, pero en 64 con VSC 2013 si.
No se por donde puedo continuar para aislar el problema.
Por si puede ayudar utilizo 2 timers en la aplicación (no creo que tenga nada que ver pero lo dejo dicho por si acaso).
Re: Migrando de FWH 32 a FWH 64 - windows.h
Hola, no te genera un fichero hb_out.log ?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Re: Migrando de FWH 32 a FWH 64 - windows.h
No. No encuentro ese fichero por ninguna parte.
Re: Migrando de FWH 32 a FWH 64 - windows.h
Al fin ha quedado solucionado el cuelgue al salir de la aplicación en 64 bits:
Código que genera el cuelgue:
Código que elimina el cuelgue (quitar todo el VALID):
Código que genera el cuelgue:
Code: Select all
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( oWnd:setfont(oFontDoble), Arranque(oWnd), oBtnV:setfocus() ) ;
VALID (iif(GetKeyState (VK_ESCAPE), .F.,oWnd:End()))
Code: Select all
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( oWnd:setfont(oFontDoble), Arranque(oWnd), oBtnV:setfocus() )
Re: Migrando de FWH 32 a FWH 64 - windows.h
Quizas quitando solo el oWnd:End() sea suficiente, asi
Code: Select all
VALID ( iif(GetKeyState (VK_ESCAPE), .F., .T. ) )
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.