我想在java中寫入c#中的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");
}
}
}
在這之後我加載產生的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 2011-12-30 01:08:06
@fge:我做到了 。它沒有工作。 – ankurtr 2011-12-30 01:12:42
你當然知道,.NET DLL不是標準的DLL,並且它們本身不能與JNI一起工作。 – 2011-12-30 01:13:31