2009-01-29 13 views
10

से लिंक करने के लिए जेएनए का उपयोग करना मैं जेएनए का उपयोग कर कस्टम .lib/.dll फ़ंक्शन कैसे एक्सेस करूं? क्या कोई उदाहरण प्रदान कर सकता है?कस्टम डीएल

धन्यवाद।

उत्तर

11

उदाहरण (from Wikipedia):

import com.sun.jna.win32.StdCallLibrary; 
import com.sun.jna.Native; 

/** Simple example of Windows native library declaration and usage. */ 
public class BeepExample { 
    public interface Kernel32 extends StdCallLibrary { 
     // FREQUENCY is expressed in hertz and ranges from 37 to 32767 
     // DURATION is expressed in milliseconds 
     public boolean Beep(int FREQUENCY, int DURATION); 
     public void Sleep(int DURATION); 
    } 
    public static void main(String[] args) { 
    Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", 
      Kernel32.class); 
    lib.Beep(698, 500); 
    lib.Sleep(500); 
    lib.Beep(698, 500); 
    } 
} 

इस मामले में, हम इसे "kernel32.dll" पुस्तकालय से लोड करते हैं। मुझे उम्मीद है कि यह जेएनए स्पष्ट बनाता है।

संपादित करें: मैं कोड समझाऊंगा: आपको लाइब्रेरी से आवश्यक कार्यों के साथ एक इंटरफ़ेस (जो com.sun.jna.Library को बढ़ाता है) को परिभाषित करने की आवश्यकता है। फिर, com.sun.jna.Native.loadLibrary ("लाइब्रेरीनाम", InterfaceName.class) पर कॉल करें। अंत में, इंटरफ़ेस के प्रकार के साथ एक चर में आउटपुट स्टोर करें। बस उस चर से फ़ंक्शन को कॉल करें।

+1

आपको दिए गए विशिष्ट उदाहरण के लिए आपको StdCallLibrary को विस्तारित करना चाहिए। उपयोगकर्ता की कस्टम लाइब्रेरी पर लागू होता है या नहीं, पुस्तकालय का उपयोग करने वाले कॉलिंग सम्मेलन पर निर्भर करता है। – technomage

+0

मेरे कस्टम डीएल के लिए पथ कैसे प्रदान करें मेरा मतलब है कि अगर मेरा डीएल कहीं ई में है:/Mydll। तो पथ कैसे प्रदान करें और यदि माईडेल ने कुछ अन्य डीएलएल और लाइब्रेरी का उपयोग किया है तो क्या मुझे इन डीएल के लिए कहीं भी पथ प्रदान करने की ज़रूरत है? – Jony