Możesz to zrobić JNI albo...JNA. Ja polecam JNA bo trochę się nakodziłem integrując urządzenia z Java i robi się całkiem przyjemnie.
http://jna.java.net/
Generalnie potrzebujesz wywoływać konkretne funkcje z konkretnych dll. Mapujesz funkcje z WINAPI javowymi typami. Normalnie musiałbyś tworzyć interfejs i każda funkcję z której chcesz skorzystać odpowiednio mapować.
Sprawa jest w Twoim wypadku prostsza ponieważ te głowne dllki (user32/kernel...itp) są pomapowane przez twórce JNA. Również wprost są zdefiniowane klasy symbolizujące typy z WINAPI: DWORD i LPTCSTR itp. znajdziesz to wszystko w platform.jar. Przejrzyj, zobacz przykłady na stronce...
Jak parametr funkcji jest in/out to stosuj byte[] javowe - zawsze daje rade.
Są też rzeczy które trzeba podejrzeć. Np. pobieranie HWND okna javowego (JFrame):
public HWND pobierzHWNDOkna(JFrame frame) {
HWND hWnd = new HWND();
hWnd.setPointer(Native.getWindowPointer(frame));
return hWnd;
}
Ale to samo można wykonać na kilka sposobów.