Tôi đang cố truy cập các phương thức dll trong java đã được viết bằng C#. Từ đoạn mã sau tôi đang cố gắng xây dựng dll được tạo thành công.Truy cập các phương thức dll trong 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");
}
}
}
Sau này tôi đang tải dll được tạo ra trong mã chương trình java của tôi trong số đó là như sau
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());
}
}
}
Sau khi chạy đoạn mã này nó được đem lại cho tôi những lỗi sau.
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
Tôi không hiểu lỗi này nói gì nhưng tôi muốn giải quyết. Và một câu hỏi nữa tôi đang gặp là vì phương pháp tôi đang gọi là một phương pháp tĩnh sẽ được gọi theo cách này? tôi có nghĩa là để gọi phương thức tĩnh chúng ta cần
"ClassName.methodName"
vì vậy đây nó sẽ có thể gọi phương thức?
Bạn cần phải tải thư viện mẹ đẻ của bạn với 'System.loadLibrary()' - tốt nhất là trong một tĩnh initializer – fge
@fge: i đã làm nó . Nó không hoạt động. – ankurtr
Bạn biết tất nhiên là .NET dll không phải là tiêu chuẩn của dll và tự mình không làm việc với JNI. –