FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Pocket PC No funciona SerialNumber()
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
No funciona SerialNumber()
Posted: Tue Dec 01, 2015 04:50 PM

Buenas tardes,

He comprobado que al hacer msginfo( SerialNumber() ), me aparecen caracteres extraños.

¿Será unicode? ¿Habrá que actualizar la función? ¿Alguna solución para saber el nº de serie de la pda en cristiano?

Un Saludo,

Joaquín Martínez
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: No funciona SerialNumber()
Posted: Tue Dec 01, 2015 06:52 PM
Joaquín,

Este es el código de la funcioón SerialNumber(), voy a comprobar si hemos modificado algo en él:

Code (fw): Select all Collapse
#include <uniqueid.h>

HB_FUNC( SERIALNUMBER )
{
   DWORD dwOutBytes;
   int nBuffSize = 4096;
   char strDeviceInfo[ 200 ];
   byte arrOutBuff[ 4096 ];
   char strNextChar[ 20 ];
   char SerialNo[ 18 ];
   BOOL bRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, 0, 0, arrOutBuff, nBuffSize,
                                &dwOutBytes);
   unsigned int i;

   strDeviceInfo[ 0 ] = 0; // set zero to initialize string for next strcat()!

   if( ! bRes )
   {
      bRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, 0, 0, arrOutBuff, nBuffSize,
                              &dwOutBytes);
   }

   if( ! bRes )
   {
      hb_retc( "00000000000000000" );
      return;
   }

   for( i = 0; i < dwOutBytes; i++ )
   {
      StringCbPrintfA( strNextChar, 20, "%02X", arrOutBuff[ i ] ); 
      fw_strcat( ( char * ) strDeviceInfo, ( char * ) strNextChar );
   }

   memcpy( ( char * ) SerialNo, strDeviceInfo + 40, 2 );
   memcpy( ( char * ) SerialNo + 2, strDeviceInfo + 45, 9 );
   memcpy( ( char * ) SerialNo + 11, strDeviceInfo + 70, 6 );
   memcpy( ( char * ) SerialNo + 17, "\0", 1 );

   hb_retc( ( char * ) SerialNo );
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: No funciona SerialNumber()
Posted: Tue Dec 01, 2015 07:00 PM
Joaquín,

En el emulador de Windows CE parece estar funcionando bien:

MsgInfo( SerialNumber() )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: No funciona SerialNumber()
Posted: Tue Dec 01, 2015 09:47 PM

Antonio,
En una pda real con win ce 6.0 salen caracteres extraños.

Puedo copiar esta y probarlo, por si en la librería hay algún cambio.

Un Saludo,

Joaquín Martínez
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: No funciona SerialNumber()
Posted: Wed Dec 02, 2015 09:48 AM
Antonio,

Esto es lo que sale en la PDA. ¿A qué te suena?

Un Saludo,

Joaquín Martínez
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: No funciona SerialNumber()
Posted: Wed Dec 02, 2015 07:08 PM

Imagino que KernelIoControl() no está funcionando bien ahí

No se me ocurre otra causa...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: No funciona SerialNumber()
Posted: Thu Dec 03, 2015 06:17 PM
Antonio Buenas tardes,

En la la librería de FWPPC tiene que haber algo mal.

Te comento, añado en mi prg la función que me pasaste y me dice que no existen 2 funciones de fwppc.h y fwstr.c.
Añado esas 2 funciones y YA me devuelve el número de serie PERFECTAMENTE.

Creo que hay que arreglar algo dentro de las librerias de FWPPC porque no me cuadra.

Te paso el código que poniendo en mi prg hace funcionar la función perfectamente.

Code (fw): Select all Collapse
#include <uniqueid.h>
#include <fwppc.h>

char * fw_strcpy( char * s1, const char * s2 )
{
   char * s = s1;

   while( ( * s++ = * s2++ ) != 0 )
     ;

   return s1;
}

char * fw_strcat( char * s1, const char * s2 )
{
   fw_strcpy( &s1[ strlen( s1 ) ], s2 );

   return s1;
}


HB_FUNC( PRUEBA_SERIALNUMBER )
{
   DWORD dwOutBytes;
   int nBuffSize = 4096;
   char strDeviceInfo[ 200 ];
   byte arrOutBuff[ 4096 ];
   char strNextChar[ 20 ];
   char SerialNo[ 18 ];
   BOOL bRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, 0, 0, arrOutBuff, nBuffSize,
                                &dwOutBytes);
   unsigned int i;

   strDeviceInfo[ 0 ] = 0; // set zero to initialize string for next strcat()!

   if( ! bRes )
   {
      bRes = KernelIoControl( IOCTL_HAL_GET_DEVICEID, 0, 0, arrOutBuff, nBuffSize,
                              &dwOutBytes);
   }

   if( ! bRes )
   {
      hb_retc( "00000000000000000" );
      return;
   }

   for( i = 0; i < dwOutBytes; i++ )
   {
      StringCbPrintfA( strNextChar, 20, "%02X", arrOutBuff[ i ] );
      fw_strcat( ( char * ) strDeviceInfo, ( char * ) strNextChar );
   }

   memcpy( ( char * ) SerialNo, strDeviceInfo + 40, 2 );
   memcpy( ( char * ) SerialNo + 2, strDeviceInfo + 45, 9 );
   memcpy( ( char * ) SerialNo + 11, strDeviceInfo + 70, 6 );
   memcpy( ( char * ) SerialNo + 17, "\0", 1 );

   hb_retc( ( char * ) SerialNo );
}


Le he cambiado el nombre a la función para evitar conflicto y que no haya equivocaciones. Llamas a Prueba_SerialNumber y funciona.
Un Saludo,

Joaquín Martínez
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: No funciona SerialNumber()
Posted: Thu Dec 03, 2015 09:54 PM

Joaquín,

Por lo que veo el código de esas funciones es el propio de FWPPC.

Y a varios usuarios de FWPPC y a mo nos funciona bien la función SerialNumber()

A ver si se me ocurre que pueda ser, gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion