Problemas Socket y Windows CE 4.2

Problemas Socket y Windows CE 4.2

Postby jmartial » Tue Mar 14, 2006 7:30 pm

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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Tue Mar 14, 2006 7:57 pm

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
User avatar
Antonio Linares
Site Admin
 
Posts: 42069
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Tue Mar 14, 2006 8:18 pm

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: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby jmartial » Thu Mar 16, 2006 8:19 pm

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: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby jmartial » Thu Mar 16, 2006 8:30 pm

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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Thu Mar 16, 2006 9:04 pm

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
User avatar
Antonio Linares
Site Admin
 
Posts: 42069
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Thu Mar 16, 2006 9:36 pm

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>
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Thu Mar 16, 2006 9:49 pm

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
User avatar
Antonio Linares
Site Admin
 
Posts: 42069
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jmartial » Thu Mar 16, 2006 10:04 pm

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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Postby Antonio Linares » Thu Mar 16, 2006 10:24 pm

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  Expand view
#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
User avatar
Antonio Linares
Site Admin
 
Posts: 42069
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Pocket PC

Who is online

Users browsing this forum: No registered users and 5 guests