gpt4 book ai didi

Java 调用 Windows API GetShortPathName

转载 作者:行者123 更新时间:2023-11-30 07:25:12 25 4
gpt4 key购买 nike

我想在我的 java 类中使用 native 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);
}

}

最佳答案

感谢提示。以下是我改进的功能。它使用 GetShortPathName 的 Unicode 版本

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);
}

关于Java 调用 Windows API GetShortPathName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11038595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com