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

Advapi32 カプセル化がすでに JNA の一部であることをご存知ですか? こちらをご覧ください。あなたのメソッド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);
    ...
 }
}
于 2015-04-21T07:29:43.457 に答える
0

JNA に付属するライブラリ マッピングを見るAdvapi32と、ライブラリのインスタンス化にload メソッドに対するいくつかのオプションが含まれていることがわかります。特に、これらのロード オプションは、リンクしようとしている関数の実際の名前であるなどを自動的にマップします。RegLoadKeyRegLoadKeyW

于 2015-04-21T16:27:15.950 に答える
-1

JNA 開発エラーの典型です。使用する前に追加するだけです。

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

PATH_TO_LIBRARY_JNA - jna lib への絶対パス

于 2015-06-05T08:01:05.810 に答える