Neoprot/Neokey/Hardlock
Enviado: 08 Jan 2019 09:11
Estou tetando portar as funções do produto da Neoprot. http://www.neoprot.com.br/NeoKey.aspx. Se trata de um hardlock muito interessante porem não tem suporte para linux no harbour em windows funciona tranquilo com uma dll que é fornecida. Mas meu foco é linux então tenho que usar lib statica que é feita em C por conta disso tenho que criar um ponte para o harbour e a lib se comunicarem. Estou tendo dificuldades creio que seja coisa simples mas não tenho amplo conhecimento da "hbapi.h" então segue o que estou tentando fazer.
Essa é a função "portada" que está funcionando mas não da forma correta, foi o que consegui.
Essa é a chamada da função
Segue a forma correta, como funciona em C.
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.
Essa é a função "portada" que está funcionando mas não da forma correta, foi o que consegui.
Código: Selecionar todos
//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 );
}
}
Código: Selecionar todos
RET := NeoKey_Login( "xxxxxxxxxxxxxxxx" , 16, 0, 0, "xxxxxxxx" )
Código: Selecionar todos
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." );
}
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.