Problemas Socket y Windows CE 4.2
Problemas Socket y Windows CE 4.2
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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
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
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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>
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>
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Joaquín,
Acabamos de probar este ejemplo con el build de FWPPC más reciente, en el emulador, y ha funcionado correctamente:
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