J'essaie d'accéder en Java à des méthodes de la DLL qui ont été écrites en C#. A partir du code suivant, j'essaie de construire la dll qui est générée avec succès.
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");
}
}
}
Après cela, je charge la dll générée dans mon programme java dont le code est le suivant
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());
}
}
}
Après avoir exécuté ce code, j'obtiens l'erreur suivante.
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
Je ne comprends pas ce que dit cette erreur mais je veux la résoudre. Et une autre question que je me pose est que, puisque la méthode que j'appelle est une méthode statique, sera-t-elle appelée de cette façon ? Je veux dire que pour appeler une méthode statique, nous avons besoin de
"nom de classe.nom de méthode"
donc ici pourra-t-il appeler la méthode ?