Sto tentando di accedere ai metodi dll in java che è stato scritto in C#. Dal codice seguente sto provando a compilare dll che viene generata con successo.Accesso ai metodi dll in 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");
}
}
}
Dopo questo sono caricamento della DLL generato nel mio codice programma Java cui dispositivo è del seguente
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());
}
}
}
Dopo l'esecuzione di questo codice che mi sta dando il seguente errore.
"Exjni.JNI.getValue(Ljava/lang/String;)Ljava/lang/String;"
Beh, non capisco cosa stia dicendo questo errore ma voglio risolverlo. E un'altra domanda che sto avendo è che il metodo che sto chiamando è un metodo statico che verrà chiamato in questo modo? Voglio dire di chiamare il metodo statico dobbiamo
"classname.methodname"
ecco che sarà in grado di chiamare il metodo?
è necessario caricare la libreria nativa con 'System.loadLibrary()' - preferibilmente in una statica inizializzatore – fge
@fge: i fatto . Non ha funzionato. – ankurtr
Sapete, ovviamente, che .NET dll non sono dll standard e di per sé non funzionano con JNI. –