Wywołanie Java dla API Windows GetShortPathName
Chciałbym użyć funkcji natywnego api systemu Windows w mojej klasie java.
Interesującą mnie funkcją jest GetShortPathName.http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx
Próbowałem tego użyć -http://dolf.trieschnigg.nl/eightpointthree/eightpointthree.html ale w niektórych warunkach java ulega awarii, gdy z niej korzystam, więc nie jest to dla mnie opcja.
Pytanie brzmi: Czy muszę pisać kod w np. C, tworzyć DLL, a następnie używać tej biblioteki DLL w JNI / JNA? A może w jakiś sposób mogę uzyskać dostęp do systemu API w inny sposób?
Będę wdzięczny za twoje komentarze. Gdybyś mógł podać jakiś kod jako przykład, byłbym wdzięczny.
...
Znalazłem odpowiedź za pomocą JNA
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
public class Utils {
public static String GetShortPathName(String path) {
byte[] shortt = new byte[256];
//Call CKernel32 interface to execute GetShortPathNameA method
int a = CKernel32.INSTANCE.GetShortPathNameA(path, shortt, 256);
String shortPath = Native.toString(shortt);
return shortPath;
}
public interface CKernel32 extends Kernel32 {
CKernel32 INSTANCE = (CKernel32) Native.loadLibrary("kernel32", CKernel32.class);
int GetShortPathNameA(String LongName, byte[] ShortName, int BufferCount);
}
}