Java-вызов для Windows API GetShortPathName
Я хотел бы использовать встроенную функцию Windows API в моем классе Java.
Интересующая меня функция - GetShortPathName. http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx
Я пытался использовать это - http://dolf.trieschnigg.nl/eightpointthree/eightpointthree.html но в некоторых случаях java полностью падает, когда я его использую, так что это не вариант для меня.
Вопрос в том, должен ли я писать код, например, на C, создавать DLL, а затем использовать эту DLL в JNI/JNA? А может я как-то могу получить доступ к системному API по-другому?
Буду признателен за ваши комментарии. Если бы вы могли опубликовать код в качестве примера, я был бы благодарен.
...
Я нашел ответ, используя 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);
}
}
1 ответ
Спасибо за подсказку. Следующее - моя улучшенная функция. Он использует Unicode-версию GetShortPathName
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
public static String GetShortPathName(String path) {
char[] result = new char[256];
Kernel32.INSTANCE.GetShortPathName(path, result, result.length);
return Native.toString(result);
}