Page 1 of 1

No funciona SerialNumber()

PostPosted: Tue Dec 01, 2015 4:50 pm
by jmartial
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?

Re: No funciona SerialNumber()

PostPosted: Tue Dec 01, 2015 6:52 pm
by Antonio Linares
Joaquín,

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

Code: Select all  Expand view
#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 );
}
 

Re: No funciona SerialNumber()

PostPosted: Tue Dec 01, 2015 7:00 pm
by Antonio Linares
Joaquín,

En el emulador de Windows CE parece estar funcionando bien:

MsgInfo( SerialNumber() )

Image

Re: No funciona SerialNumber()

PostPosted: Tue Dec 01, 2015 9:47 pm
by jmartial
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.

Re: No funciona SerialNumber()

PostPosted: Wed Dec 02, 2015 9:48 am
by jmartial
Antonio,

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

Image

Re: No funciona SerialNumber()

PostPosted: Wed Dec 02, 2015 7:08 pm
by Antonio Linares
Imagino que KernelIoControl() no está funcionando bien ahí

No se me ocurre otra causa...

Re: No funciona SerialNumber()

PostPosted: Thu Dec 03, 2015 6:17 pm
by jmartial
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: Select all  Expand view
#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.

Re: No funciona SerialNumber()

PostPosted: Thu Dec 03, 2015 9:54 pm
by Antonio Linares
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