Windows api使用jna:找不到指定的过程

时间:2015-04-20 15:12:33

标签: java jna advapi32

我需要使用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的新手。

3 个答案:

答案 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的绝对路径