我试图在 Java 中访问由 C# 编写的 DLL 方法。我正在尝试构建 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;"
我不太理解这个错误在说什么,但我想解决它。
我还有一个问题,因为我要调用的方法是一个静态方法,所以它会被这样调用吗?我的意思是,要调用静态方法,我们需要使用
"类名.方法名"
那么这里能够成功调用该方法吗?