Migrando de FWH 32 a FWH 64 - windows.h

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Verhoven » Tue Jan 06, 2015 9:08 am

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().
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby lucasdebeltran » Tue Jan 06, 2015 10:27 am

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.
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.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Antonio Linares » Tue Jan 06, 2015 10:33 am

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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41362
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby lucasdebeltran » Tue Jan 06, 2015 10:36 am

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.
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.
User avatar
lucasdebeltran
 
Posts: 1303
Joined: Tue Jul 21, 2009 8:12 am

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Verhoven » Tue Jan 06, 2015 11:06 am

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:
Code: Select all  Expand view
#pragma warning(disable: 4996)
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Antonio Linares » Tue Jan 06, 2015 4:20 pm

Paz,

Es que has escrito hb_fsopen() y en realidad es hb_fsOpen()

Cámbialo y vuelve a compilarlo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41362
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Migrando de FWH 32 a FWH 64 - hb_fsOpen() fopen() en C

Postby Verhoven » Tue Jan 06, 2015 6:44 pm

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:
Code: Select all  Expand view
FILE *fichero;
    char nombre[12] = "LISTFTP.DAT";
    fichero = fopen( nombre, "w" );

La versión con hb_fsOpen() debe de escribirse:
Code: Select all  Expand view
FILE *fichero;
    char nombre[12] = "LISTFTP.DAT";
    fichero = (FILE *) hb_fsOpen( nombre, FO_WRITE );


Sin esto, al compilar, nos da el siguiente error:
Code: Select all  Expand view
internet.prg(461) : warning C4047: '=' : 'FILE *' differs in levels of indirection from 'HB_FHANDLE'


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).
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Antonio Linares » Tue Jan 06, 2015 7:11 pm

Paz,

Esas 3 líneas las podrías agrupar en una sola:

FILE * fichero = ( FILE *) hb_fsOpen( "LISTFTP.DAT", FO_WRITE );
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41362
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Verhoven » Tue Jan 06, 2015 8:37 pm

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.
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Antonio Linares » Wed Jan 07, 2015 6:35 am

Paz,

Lo que quieras cerrar, liberar, etc. hazlo despues del ACTIVATE WINDOW oWnd principal.

Es el lugar correcto :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41362
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Verhoven » Wed Jan 07, 2015 10:43 pm

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).
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby cnavarro » Wed Jan 07, 2015 10:56 pm

Hola, no te genera un fichero hb_out.log ?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6501
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Verhoven » Thu Jan 08, 2015 7:29 am

No. No encuentro ese fichero por ninguna parte.
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby Verhoven » Thu Jan 08, 2015 2:58 pm

Al fin ha quedado solucionado el cuelgue al salir de la aplicación en 64 bits:
Código que genera el cuelgue:
Code: Select all  Expand view
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( oWnd:setfont(oFontDoble),  Arranque(oWnd),  oBtnV:setfocus() ) ;
      VALID (iif(GetKeyState (VK_ESCAPE), .F.,oWnd:End()))


Código que elimina el cuelgue (quitar todo el VALID):
Code: Select all  Expand view
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( oWnd:setfont(oFontDoble),  Arranque(oWnd),  oBtnV:setfocus() )
Verhoven
 
Posts: 505
Joined: Sun Oct 09, 2005 7:23 pm

Re: Migrando de FWH 32 a FWH 64 - windows.h

Postby cnavarro » Thu Jan 08, 2015 3:33 pm

Quizas quitando solo el oWnd:End() sea suficiente, asi
Code: Select all  Expand view

VALID ( iif(GetKeyState (VK_ESCAPE), .F., .T. ) )
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6501
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 34 guests