我需要使用RegLoadKey在我的java代码中使用jna函数,但是我收到以下错误消息:
线程“main”中的异常java.lang.UnsatisfiedLinkError:查找函数'RegLoadKey'时出错:找不到指定的过程。 块引用
RegLoadKey语法
LONG WINAPI RegLoadKey(
_In_ HKEY hKey,
_In_opt_ LPCTSTR lpSubKey,
_In_ LPCTSTR lpFile
);
我的代码: Advapi32.java
import com.sun.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.win32.StdCallLibrary;
public interface Advapi32 extends StdCallLibrary
{
long RegLoadKey(HKEY hKey, String lpSubKey,String lpFile);
}
apiTest.java
import com.sun.jna.*;
import com.sun.jna.platform.win32.WinReg.HKEY;
public class apiTest
{
public static void main (String [] args)
{
Advapi32 lib2 = (Advapi32) Native.loadLibrary("Advapi32", Advapi32.class);
HKEY key1 = new HKEY();
String filePath = "C:\\tmp\\software";
String regName = "loadedRegKey";
long test = lib2.RegLoadKey(key1, regName, filePath);
}
我认为我的代码存在一些问题。我是windows api和jna的新手。
答案 0 :(得分:0)
您是否知道Advapi32封装已经是JNA的一部分?
看看here。我刚刚看到你的方法RegLoadKey
尚未添加。所以添加它并将该更改提交给jna家伙。之后你可以像这样使用它(伪代码):
public class RegistryRead{
private Advapi32 api = null;
public RegistryRead(){
this.api = Advapi32.INSTANCE;
}
public void read() {
long winapi = this.api.RegLoadKey(HKEY hkey, String subkey, String file);
...
}
}
答案 1 :(得分:0)
如果您查看Advapi32
库映射that comes with JNA,您会发现库实例化包含加载方法的一些options。除此之外,这些加载选项会自动将RegLoadKey
之类的内容映射到RegLoadKeyW
,这是您尝试链接到的函数的真实名称。
答案 2 :(得分:-1)
这是JNA发生错误的典型情况。只需在使用之前添加。
System.setProperty("jna.library.path","PATH_TO_LIBRARY_JNA");
PATH_TO_LIBRARY_JNA - jna lib的绝对路径