No funciona SerialNumber()

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

No funciona SerialNumber()

Post 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?
Un Saludo,
Joaquín Martínez
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: No funciona SerialNumber()

Post 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

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

Re: No funciona SerialNumber()

Post by Antonio Linares »

Joaquín,

En el emulador de Windows CE parece estar funcionando bien:

MsgInfo( SerialNumber() )

Image
regards, saludos

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

Re: No funciona SerialNumber()

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

Re: No funciona SerialNumber()

Post by jmartial »

Antonio,

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

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

Re: No funciona SerialNumber()

Post by Antonio Linares »

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

No se me ocurre otra causa...
regards, saludos

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

Re: No funciona SerialNumber()

Post 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

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

Re: No funciona SerialNumber()

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply