Essa é a função "portada" que está funcionando mas não da forma correta, foi o que consegui.
//int NeoKey_Login(unsigned char *message, unsigned int size, unsigned int licenseID, unsigned int Type, unsigned char *HardwareID)
HB_FUNC( NEOKEY_LOGIN ) {
unsigned char *Challenge[17];
unsigned char *HardwareID[9];
memcpy( Challenge, hb_parc(1), 17 );
memcpy( HardwareID, hb_parc(5), 8 );
int ret = NeoKey_Login( Challenge, hb_parni(2), hb_parni(3), hb_parni(4), HardwareID );
if ( ret ) {
hb_retnl( ret );
} else {
hb_retc( Challenge );
}
}
Essa é a chamada da função
RET := NeoKey_Login( "xxxxxxxxxxxxxxxx" , 16, 0, 0, "xxxxxxxx" )
Segue a forma correta, como funciona em C.
int main (void)
{
//*********************************************************************************************************
//iniciando variaveis
int ret;
unsigned char Challenge[17];
unsigned char HardwareID[10];
//*********************************************************************************************************
//iniciando API
printf( "\nLoading API." );
if ( !LoadClientAPI() ) {
return (0);
}
printf( "\nLoadAPI OK." );
//*********************************************************************************************************
//fazendo login
memcpy( Challenge, "xxxxxxxxxxxxxxxx", 17 );
memcpy( HardwareID, "xxxxxxxx", 8 );
printf( "\nChallenge: %s\n ", Challenge );
ret = NeoKey_Login( Challenge, 16, 0, 0, HardwareID );
if ( ret ) {
printf( "\nLoginFailed - returned = %d\n", ret );
return( 0 );
}
printf( "\nLogin OK." );
}
Em resumo eu tenho que passar a variavel contendo a string e não a string direto. Isso no primeiro e no quinto parametro. Por que? Por que em C quando é passado a variavel Challenge para a função NeoKey_Login() se está estiver com a senha correta do produto a mesma é transforma na string resposta do neokey. O mesmo acontece com a variavel HardwareID. Então usando o exemplo ali:
antes de passar para função: Challenge == "xxxxxxxxxxxxxxxx"
apos passar para função se for a senha correta: Challenge == "zzzzzzzzzzzzzzzz" por exemplo.
Bom tentei explicar o maximo de detalhes aqui mas talvez tenha ficado confuso. Então basicamente a grosso modo, eu tenho que declarar minha variavel Challenge no harbour e enviar para a lib e a mesma tem que ter o poder de muda-la isso eu não consegui fazer.