Migrando de FWH 32 a FWH 64 - windows.h

Verhoven
Posts: 435
Joined: Sun Oct 09, 2005 7:23 pm

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

Post by Verhoven »

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

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

Post by lucasdebeltran »

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
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

Post by Antonio Linares »

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

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

Post by lucasdebeltran »

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

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

Post by Verhoven »

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

#pragma warning(disable: 4996)
User avatar
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

Post by Antonio Linares »

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

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

Post by Verhoven »

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

FILE *fichero;
    char nombre[12] = "LISTFTP.DAT";
    fichero = fopen( nombre, "w" );
La versión con hb_fsOpen() debe de escribirse:

Code: Select all

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

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).
User avatar
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

Post by Antonio Linares »

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

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

Post by Verhoven »

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.
User avatar
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

Post by Antonio Linares »

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

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

Post by Verhoven »

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).
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

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

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

Post by Verhoven »

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

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

Post by Verhoven »

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

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

ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( oWnd:setfont(oFontDoble),  Arranque(oWnd),  oBtnV:setfocus() )
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

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

Post by cnavarro »

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.
Post Reply