私はC#で書かれたjavaのdllメソッドにアクセスしようとしています。次のコードから、正常に生成されたDLLをビルドしようとしています。javaのdllメソッドへのアクセス
using System;
using Microsoft.Win32;
namespace CyberoamWinHelper
{
public class RegistryAccess
{
public static String getValue(String key)
{
RegistryKey rk = Registry.CurrentUser;
RegistryKey rk1=rk.OpenSubKey("Software\\Test", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
rk1.SetValue(key, "val1");
return rk1.GetValue(key).ToString();
}
public static void createSubkey(String name)
{
RegistryKey rk = Registry.CurrentUser;
rk.CreateSubKey("Software\\Test");
}
}
}
この後、私はそれは私に次のエラーを与えているこのコードを実行した後
public class JNI {
/**
* @param args the command line arguments
*/
public native String getValue(String key);
public static void main(String[] args) {
// TODO code application logic here
try
{
System.loadLibrary("CyberoamWinHelper");
JNI j=new JNI();
System.out.println(j.getValue("abc"));
}
catch(UnsatisfiedLinkError e)
{
System.out.println("Ex" + e.getMessage());
}
}
}
を次のようにしているの私のJavaプログラムのコードで生成されたDLLをロードしています。
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
このエラーの内容を理解していませんが、解決したいと思います。 もう1つの質問は私が持っている方法は私が呼び出しているので静的メソッドは、このように呼び出されますか?私たちはので、ここで「classname.methodname」
メソッドを呼び出すことができるようになります
を必要とする静的メソッドを呼び出すために意味ですか?
あなたはSystem.loadLibraryを('であなたのネイティブライブラリをロードするために必要な特定のためのhttp://www.codeproject.com/KB/cross-platform/javacsharp.aspx - 好ましくは静的初期化子 – fge
@fgeに:
はを見てください、私はそれをやった 。それはうまくいかなかった。 – ankurtrもちろん、.NET DLLは標準DLLではなく、それ自体がJNIで動作しません。 –