2010-12-06 27 views
0

Je suis totalement nouveau à JNI et C et j'ai des problèmes pour obtenir ma tête enroulée autour de la façon de faire cette tâche.Références pointeur entre C et Java

J'ai une fonction native C avec la signature suivante: vide DoEncrypt (char * buffer, int * longueur) {... crypter les données dans un tampon en place ... ...}

J'ai également la méthode inverse pour faire le décryptage sur le chemin du retour. Le problème que je suis en train de comprendre, avec JNI, comment passer dans les deux pointeurs, puis récupérer le mot de passe crypté ou déchiffré, à partir de son emplacement de mémoire, soit par la classe wrapper ou la méthode Java d'origine.

À l'heure actuelle, je pense à écrire un wrapper en C pour appeler les fonctions DoEncrypt et DoDecrypt qui utiliseront jobject et jstring pour obtenir la valeur du mot de passe.

Est-ce correct? Est-ce le meilleur/le plus simple/le plus rapide?

J'apprécie toute l'aide que vous pouvez partager.

Merci,

Chuck

Répondre

0

les fonctions wrapper sont bonnes, puisque vous pouvez tester la DoEncrypt et DoDecrypt directement de C. Vous pouvez écrire l'emballage comme ceci:

void DoEncrypt_jni(JNIEnv** env, jarray* buffer, int* length) { 
    ... call the real DoEncrypt ... 
} 

(En fait, vous pouvez essayer d'utiliser JNA, qui est fondamentalement "JNI avec moins de douleur". Avec la JNA, vous pouvez écrire une classe Java

public class EncryptUtilsJNA { 
    public static native void DoEncrypt(byte[] buffer, int length); 
    public static native void DoDencrypt(byte[] buffer, int length); 
} 

et travaille JNA comment appeler les fonctions DoEncrypt/DoDecrypt C, qui, évidemment, ils doivent être appelable de Java comme vous le feriez avec JNI.