Estoy tratando de acceder a los métodos dll en Java que se han escrito en C#. Desde el siguiente código estoy tratando de construir dll que se genera con éxito.Accediendo a los métodos dll en 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");
}
}
}
Después de esto estoy cargar la DLL generada en mi código de programa java de los cuales es el siguiente
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());
}
}
}
Después de ejecutar este código es que me da el siguiente error.
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
Bueno, no entiendo lo que dice este error, pero quiero resolverlo. Y una pregunta más que estoy teniendo es que dado que el método que estoy llamando es un método estático ¿se llamará de esta manera? me refiero a llamar al método estático que necesitamos
"classname.methodname"
así que aquí va a ser capaz de llamar al método?
necesita cargar su biblioteca nativa con 'System.loadLibrary()' - preferiblemente en un inicializador estático – fge
@fge: i lo hizo . No funcionó. – ankurtr
Usted sabe, por supuesto, que los .NET dll no son dll estándar y que por sí solos no funcionan con JNI. –