Le Wrappeur d'une bibliothèque Windows

Avant toutes choses, je voulais remercier ChriChri sans qui ce tutoriel n'aurait pas vu le jour.

Il vous est certainement déjà arrivé de vous dire en développant un programme Java "Ah, je sait que la bibliothèque Windows existe, mais comment l'appeler ?". Pour vous aider à ne plus être limité par les fonctionnalités de base de Java, voici un petit tutoriel vous permettant d'apprendre à appeler une bibliothèque système.

Pré-requis :

1) Un compilateur C. Je vous conseille le "Borland C++ Compiler 5.5.1" en ligne de commande qui est gratuit (freecommandLinetools.exe).

2) La package de base est à décompacter dans votre répertoire de travail.
Il contient deux répertoires :
Le premier /src, contient le code source d'une classe java com/penpen/util/SystemInfo.java réalisant l'appel aux bibliothèques systhèmes. Le second /cpp contient deux fichiers "CreateDLL.bat" et "SystemInfo.c". Le code c de ce dernier fait appel à la fonction GetLogicalDriveStrings() de la bibliothèque "windows.h". Vous trouverez une référence sur l'ensemble des bibliothèques systèmes sur le site de Microsoft.

Le schéma général :

Le fichier de construction :

Voici le contenu du fichier bat :

set WORK_DIR=G:\\workarea\\WrapperDLL
set WORK_DIR_CPP=%WORK_DIR%\\cpp
set WORK_DIR_BIN=%WORK_DIR%\\bin

set JAVA_HOME=C:\java\j2sdk1.4.2
set JAVAH=%JAVA_HOME%\bin\javah
set BCC32_HOME=D:\BCC55
set BCC32=%BCC32_HOME%\bin\bcc32.exe

Dans cette première section, adaptez les valeurs avec celles de votre configuration.
Dans la section suivante, on nettoie et on positionne le répertoire de travail.

del /F /Q "%WORK_DIR_CPP%\SystemInfo.dll"
g:
cd %WORK_DIR_CPP%

Ensuite, on exécute la Javah.exe pour extraire le fichier ".h" de la classe java.

%JAVAH% -d G:\\workarea\\WrapperDLL\\cpp -classpath %WORK_DIR_BIN% com.penpen.util.SystemInfo

Il ne reste plus qu'à compiler le code C, avec les bonnes options pour enchainer le linkage.

%bcc32% -I"%BCC32_HOME%\Include" -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -L"%BCC32_HOME%\Lib" -WD -O2 -Vx -Ve -X- -a8 -b- -k- -vi -tWD -tWM- -q -lD"" -laa -lTpd -lx -lGn -lGi SystemInfo.c

Il reste encore une dernière chose à faire : Supprimer les fichiers du hander java, de compilation et de linkage C.
N'oublier pas non plus de mettre la DLL générée dans votre PATH, ce qui est fait ici en le mettant dans le répertoire de Windows :

del /F /Q "%WORK_DIR_CPP%\SystemInfo.lib"
del /F /Q "%WORK_DIR_CPP%\SystemInfo.obj"
del /F /Q "%WORK_DIR_CPP%\SystemInfo.tds"
del /F /Q "%WORK_DIR_CPP%\com_penpen_util_SystemInfo.h"

copy %WORK_DIR_CPP%\SystemInfo.dll c:\Windows\System32\SystemInfo.dll

Et voilà, c'est tout.