No funciona SerialNumber()

No funciona SerialNumber()

Postby jmartial » Tue Dec 01, 2015 4: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
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: No funciona SerialNumber()

Postby Antonio Linares » Tue Dec 01, 2015 6:52 pm

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 );
}
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: No funciona SerialNumber()

Postby Antonio Linares » Tue Dec 01, 2015 7:00 pm

Joaquín,

En el emulador de Windows CE parece estar funcionando bien:

MsgInfo( SerialNumber() )

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: No funciona SerialNumber()

Postby jmartial » Tue Dec 01, 2015 9: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.
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: No funciona SerialNumber()

Postby jmartial » Wed Dec 02, 2015 9:48 am

Antonio,

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

Image
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: No funciona SerialNumber()

Postby Antonio Linares » Wed Dec 02, 2015 7:08 pm

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

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: No funciona SerialNumber()

Postby jmartial » Thu Dec 03, 2015 6: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: 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.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: No funciona SerialNumber()

Postby Antonio Linares » Thu Dec 03, 2015 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41206
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 2 guests