Problemas Socket y Windows CE 4.2

Post Reply
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Problemas Socket y Windows CE 4.2

Post by jmartial »

Hola,

Intentado juguetear con los sockets he descubierto que dan un internal error en Windows CE, sin embargo en Windows Mobile parece que va bien, incluyendo el emulador.

Las pruebas las estoy haciendo con una casio cassiopea IT-600

Esto falla: o := TSocket():New( , oWnd )

Esto también: nSocket := Socket( AF_IRDA, SOCK_STREAM, 0 )
devuelve -1 en vez de un nº de socket y no es un valor válido.

Es muy importante, pues inmediatamente, perdemos compatibilidad con las máquinas industriales bajo win CE.


Un Saludo,
Joaquín
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joaquín,

Con los builds más recientes de FWPPC se indica la descripción del error interno. ¿ Que descripción te sale ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

El mensage es un msgbox que casi no da tiempo de leerlo, pues desaparece sólo, como título pone "hb_internal()" y como texto "internal error".

Construído con el último build, no existe más descripción del error por ningún lado, ni siquiera como error.txt en la carpeta donde lo ejecuto.



Un Saludo,
Joaquín
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Antonio,

Sigo con las pruebas, a ver si averiguamos de donde viene el problema.
El siguiente ejemplo:

WSAStartup()
msginfo( "Pru socket1 "+str(socket(AF_IRDA, SOCK_STREAM, 0)) )
msginfo( "Pru socket2 "+str(prusock()) )
WSACleanUp()

//--------- Función en C para prusock() ---------------
HB_FUNC( PRUSOCK )
{
hb_retni( socket(AF_IRDA, SOCK_STREAM, 0) );
}

En windows Mobile la 1 da Ok la 2 da Error.

En windows CE 5.0 la 1 da Error la 2 da Ok


Explicación? No encuentro ninguna. A ver si Antonio ve alguna diferencia entre la implementación que tiene de la función socket fwppc, de la que muestro yo de pruebas.

Un Saludo,
Joaquín
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Se me olvidaba decir, por si pudiera tener algo que ver, que estos son los ficheros que incluyo en la cabecera del C

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>
#include "winsock2.h"
#define _WIN32_WCE
#include <af_irda.h>


Un Saludo,
Joaquín
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joaquín,

la implementación de sockets de FWPPC está en source\winapi\winsock.c

y la llamada a la función socket() se hace desde la Clase TSocket así:

Socket( AF_INET, SOCK_STREAM, IPPROTO_IP )

Tu usas AF_IRDA en vez de AF_INET. AF_IRDA es el infrarojos, no ? quizá sea esa la diferencia.
regards, saludos

Antonio Linares
www.fivetechsoft.com
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Antonio,

No van por ahí los tiros, te explico:

Esto directamente falla en Win CE

TSocket():New( , oWnd ) // provoca hb_internal error

y otro tema es que me parece que ya he visto la diferencia:

En el código C hay que definir lo siguiente:

// Para Windows Mobile
#define _WIN32_WCE

// Para Windows CE 5.0
#define _WIN32_WINDOWS


El problema es que no soy muy ducho con el C y no sé poner al principio, lo siguiente ( son simulados los comandos de C )


#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

//---------- Habría alguna manera de poner este trocito en C
if IsMobile
#define _WIN32_WCE
else
#define _WIN32_WINDOWS
//-------------------------------------------------------------------

#Include ....




Un Saludo,
Joaquín


#include <af_irda.h>
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joaquín,

Estás usando el build más reciente de FWPPC y no te sale la descripción del error interno ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Post by jmartial »

Antonio,

Acabo de instalar el de hoy y ahora no sale ni internal error, poniendo esto:

msginfo("Antes")

o := TSocket():New( ,oWnd)

msginfo("después")

......


La palabra "después" nunca llega a mostrarse y el sistema se queda como herido (aunque no de muerte) porque puedes pulsar otro botón y salir.

Con el build de hace un par de días sólo mostraba hb_internal error


Un Saludo,
Joaquín
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Joaquín,

Acabamos de probar este ejemplo con el build de FWPPC más reciente, en el emulador, y ha funcionado correctamente:

Code: Select all

#include "FWCE.ch"

function Main()

   local oWnd, o

   DEFINE WINDOW oWnd

   msginfo("Antes") 

   o := TSocket():New( ,oWnd ) 

   msginfo("después")
   
   ACTIVATE WINDOW oWnd

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply