【问题标题】:Windows api using jna: The specified procedure could not be found使用 jna 的 Windows api:找不到指定的过程
【发布时间】:2015-04-20 15:12:33
【问题描述】:

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

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

【问题讨论】:

    标签: java jna advapi32


    【解决方案1】:

    您是否知道 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);
        ...
     }
    }
    

    【讨论】:

      【解决方案2】:

      如果您查看Advapi32 库映射that comes with JNA,您会看到库实例化包含一些options 到加载方法。除此之外,这些加载选项会自动将 RegLoadKey 等内容映射到 RegLoadKeyW,这是您尝试链接到的函数的真实名称。

      【讨论】:

        【解决方案3】:

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

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

        PATH_TO_LIBRARY_JNA - jna 库的绝对路径

        【讨论】:

        • advapi32 几乎不需要自定义加载路径。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 2019-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多