J'ai dû faire ça il y a quelques temps. Vous aurez besoin d'un compilateur C et des fichiers d'en-tête Windows. J'ai utilisé mingw parce qu'il est gratuit et que je ne compilais qu'un seul petit fichier.
D'abord, vous créez votre classe. Voici un exemple :
package org.whatever.thingy;
public class MyClass {
// Here is a JNI method, identified by 'native'
public static native callWin32Thingy(int x, int y, boolean z);
/* At this point, normal class stuff, other methods, variables, whatever */
}
Vous utilisez ensuite l'une des commandes fournies avec le JDK, qui prend automatiquement votre classe et génère des fichiers .h et .c. La commande est "javah". La signature de la méthode ressemblera à quelque chose comme ceci :
JNIEXPORT void JNICALL Java_com_whatever_1thingy_MyClass_callWin32Thingy
(JNIEnv *, jclass, jint, jint, jboolean);
Dans le fichier .c, vous incluez les en-têtes Windows dont vous avez besoin et vous étoffez la méthode.
JNIEXPORT void JNICALL Java_com_whatever_1thingy_MyClass_callWin32Thingy
(JNIEnv *a, jclass b, jint c, jint d, jboolean e) {
// Prep steps....
Win32MethodCallWeCareAbout(x, y, z, hWhatever);
// Cleanup stuff...
}
C'est très important vous ne renommez pas la méthode, c'est ainsi qu'elle est associée à votre classe spécifique.
Une fois que vous l'avez, vous compilez ces fichiers dans une DLL. Voici les commandes que j'ai utilisées pour mingw, vous devrez ajuster les classes/chemins/etc.
c:/MinGW/bin/gcc -c -Ic:/MinGW/include -I"c:/Program Files/Java/jdk1.5.0_12/include"
-I"c:/Program Files/Java/jdk1.5.0_12/include/win32" -D__int64="long long"
com_whatever_thingy_MyClass_JNIHelper.c
c:/MinGW/bin/gcc -shared -o JNIHelper.dll
com_whatever_thingy_MyClass_JNIHelper_JNIHelper.o
-Wl,--add-stdcall-alias,--kill-at,--output-def,def_file
Cela produira quelques fichiers, dont JNIHelper.dll, qui est le nom que j'ai donné à ma DLL.
A ce stade, vous avez pratiquement terminé. Vous utilisez votre classe Java comme d'habitude, et elle exécutera votre code Win32 lorsque vous appellerez la méthode statique. Tout ce que vous avez à faire est d'importer la bibliothèque. Quelque part dans votre code (je l'ai mis dans un bloc statique dans ma classe) vous aurez besoin de cette ligne :
System.loadLibrary("JNIHelper");
Java chargera alors la bibliothèque nommée "JNIHelper.dll" et l'intégrera au code. Elle doit se trouver quelque part dans le chemin de la bibliothèque que Java connaît.
C'est tout. C'est un tas d'expressions passe-partout, mais si vous faites un simple habillage, c'est facile. Si vous devez vous occuper des types Java ou de l'allocation de mémoire, c'est pire (note : je ne l'ai pas fait, donc je n'ai pas d'expérience dans ce domaine).
Il y a un tutoriel complet aquí (le premier que j'ai trouvé aujourd'hui et qui semblait décent, et vous pouvez en trouver d'autres sur le web. Le site Wikipedia L'article sur la JNI contient également plus d'informations.
J'espère que cela vous aidera.