Ho una DLL che accetta un input di stringa codificato e lo decodifica. La DLL è stata creata su un Win7 a 64 bit utilizzando Codeblocks e mingw64. Il codice C funziona bene ma quando lo eseguo tramite JNA in un ciclo while con la stessa stringa viene decodificato correttamente per circa il 70% delle chiamate e per il resto è errato. Voglio eseguire il debug della situazione, ma non sono sicuro di come farlo dopo che il codice Java ha passato il controllo a JNA. In alternativa, qualsiasi idea su dove guardare sarà anche utile.JNA C DLL Debug Howto?
La firma di metodo in C e JNA sono i seguenti,
Java: int Decrypt_Blk(byte[] expkey, byte[] in, int size, byte[] out);
C: __declspec (dllexport) int Decrypt_Blk (unsigned char *expkey, unsigned char *in, unsigned int insize, unsigned char *out);
la correttezza è determinato dalla uscita, ad esempio, se prendo la stringa "helloworld" cifrare (non sto andando in dettagli di crittografia in quanto sono irrilevanti) quindi passare l'output crittografato a questo metodo DLL, 7 volte su 10 ottengo "HelloWorld" altre 3 volte otterrei caratteri errati e variabili. E per tutte le 10 volte sono nella stessa discussione usando la stessa variabile, nello stesso ciclo. Anche le 3 occorrenze errate sono casuali, l'unica cosa che posso notare è che la prima esecuzione è SEMPRE corretta più volte che ho provato, ma l'esecuzione scorretta si verifica in una qualsiasi delle corse 1-10.
[controllare i collegamenti in basso] (http://web.archive.org/web/20081210024620/http://www.kineteksystems.com/white-papers/mixedjavaandc.html) – user1097489
Come si determina il "correttezza" dell'operazione? Il primo posto da cercare sarebbe per gli errori di conversione tra unsigned e signed in input e output. – technomage
Nota che la tua API sta facendo supposizioni sul formato dei dati '' expkey'', così come sulla dimensione del buffer '' out''. – technomage