2015-04-20 7 views
0

мне нужно использовать RegLoadKey функцию в моем Java коде, используя jna, но я получаю следующее сообщение об ошибке:Windows API с помощью ЮНА: Указанная процедура не может быть найден

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'RegLoadKey': The specified procedure could not be found. Blockquote

синтаксис 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

Знаете ли вы, что инкапсуляция 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); 
    ... 
} 
} 
+0

спасибо я буду проверять, что и обновлять их. –

0

Если вы посмотрите на отображение Advapi32 библиотеки that comes with JNA, вы увидите, что библиотека конкретизации включает в себя некоторые options методу нагрузки. Помимо прочего, эти параметры загрузки автоматически сопоставляют такие вещи, как RegLoadKey, с RegLoadKeyW, что является настоящим именем функции, к которой вы пытаетесь установить ссылку.

+0

спасибо, что ваш ответ был полезен. –

-1

Это типичная ошибка при разработке JNA. Просто добавьте перед использованием.

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

PATH_TO_LIBRARY_JNA - абсолютный путь к ЮНЕ L

+0

Advapi32 почти не понадобится настраиваемый путь загрузки. – technomage