【发布时间】:2025-12-05 02:45:01
【问题描述】:
任务是从现有的 dll 中调用方法。 我正在尝试对 kernel32.dll 中的 CopyFileA 示例执行此操作。
方法签名是:
Function long CopyFileA(String lpExistingFileName, String lpNewFileName, boolean bFailifExists) Library "kernel32"
这就是我在 java 中尝试这样做的方式:
public class Test {
static {
System.loadLibrary("D:\\test\\kernel32");
}
public static void main(String[] args) {
(new Test()).CopyFileA("D:\\test\\hi.txt", "D:\\other\\hi.txt", false);
}
public native long CopyFileA(String lpExistingFileName, String lpNewFileName, boolean bFailifExists);
}
我明白了:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.CopyFileA(Ljava/lang/String;Ljava/lang/String;Z)J
我找到的所有手册都描述了您编写 C 代码然后为自己创建 dll 的示例。因此,您可以使用生成的头文件中的签名来实现本机方法。 但是这里我们已经有了一个 dll。
谢谢!
【问题讨论】:
标签: java dll java-native-interface native