Я пытаюсь получить доступ к dll-методам в java, который был написан в C#. Из следующего кода я пытаюсь построить dll, который сгенерирован успешно.Доступ к методам dll в java
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");
}
}
}
После этого я загрузке DLL генерируется в моей Java программный код, который выглядит следующим образом
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());
}
}
}
После выполнения этого кода он дает мне следующую ошибку.
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
Ну, я не понимаю, что говорит эта ошибка, но я хочу ее решить. И еще один вопрос, который у меня есть, так как метод, который я вызываю, является статическим методом, он будет вызван таким образом? я имею в виду вызвать статический метод нам нужно
«classname.methodname»
так что здесь он будет иметь возможность вызвать метод?
Вы должны загрузить исходную библиотеку с 'System.loadLibrary()' - предпочтительно в статическом инициализатор – fge
@fge: я сделал это . Это не сработало. – ankurtr
Вы знаете, конечно, что .NET dll не являются стандартными dll и сами по себе не работают с JNI. –