我想在我的java类中使用本机Windows api函数。
我感兴趣的函数是GetShortPathName。http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx
我试图使用它 - http://dolf.trieschnigg.nl/eightpointthree/eightpointthree.html但是在某些情况下,当我使用它时,Java 会完全崩溃,因此它不适合我。
问题是我是否必须用例如C编写代码,制作DLL,然后在JNI/JNA中使用该DLL?或者也许我可以以某种方式以不同的方式访问系统 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);
}
}
感谢您的提示。以下是我的改进功能。它使用 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);
}