0

我需要使用jna在我的 java 代码中使用 RegLoadKey 函数但我收到以下错误消息:

线程“主”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 的新手。

4

3 回答 3

0

如果您查看JNA 附带Advapi32的库映射,您会看到库实例化包含一些加载方法的选项。除其他外,这些加载选项会自动将诸如to 之类的内容映射到,这是您尝试链接到的函数的真实名称。RegLoadKeyRegLoadKeyW

于 2015-04-21T16:27:15.950 回答
0

Did you know that an Advapi32 encapsulation is already part of JNA? Have a look here. I just saw that your method RegLoadKey is not yet added there. So add it and submit that change to the jna guys. Afterwards you can use it like this (pseudo code):

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);
    ...
 }
}
于 2015-04-21T07:29:43.457 回答
-1

这是典型的 JNA 开发错误。使用前添加即可。

System.setProperty("jna.library.path","PATH_TO_LIBRARY_JNA");

PATH_TO_LIBRARY_JNA - jna 库的绝对路径

于 2015-06-05T08:01:05.810 回答