में डीएलएल विधियों तक पहुंचने के लिए मैं जावा में डीएलएल विधियों तक पहुंचने की कोशिश कर रहा हूं जो सी # में लिखा गया है। निम्नलिखित कोड से मैं सफलतापूर्वक जेनरेट करने वाले डीएलएल बनाने की कोशिश कर रहा हूं।जावा
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 लोड कर रहा हूँ जिनमें से के रूप में
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
@fge में:
पर एक नज़र डालें मैं इसे करें । यह काम नहीं किया। – ankurtr
आप निश्चित रूप से जानते हैं कि .NET dll मानक डीएल नहीं हैं और स्वयं जेएनआई के साथ काम नहीं करते हैं। –