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.