乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      幾種java調(diào)用dll的方式

       陳永正的圖書館 2017-01-11

      Java調(diào)用DLL有多種方式,常用的方式有JNative、JNA、JNI等。

      JNative方式調(diào)用dll

      JNative是一種能夠使Java語言使調(diào)用DLL的一種技術(shù),對JNI進行了封裝,可能有些讀者會有這樣一個問題,JNative對JNI進行了封裝,并且是一種跨語言的使用DLL,會不會在效率方面很不如人意,我可以用我使用Jnative的經(jīng)驗告訴你,不會!因為我用Jnative就是用來處理大量的數(shù)據(jù)調(diào)用,是基于實時數(shù)據(jù)庫接口的調(diào)用。而實時數(shù)據(jù)庫的數(shù)據(jù)量是非常大的。
      首先下載JNative,
      注意:將JNative解壓,并將其中的JNativeCpp.dll拷貝到system32文件夾中,libJNativeCpp.so是linux平臺使用的。
      代碼:
      1. package com.tvjody;  
      2.   
      3. import org.xvolks.jnative.JNative;  
      4. import org.xvolks.jnative.exceptions.NativeException;  
      5. import org.xvolks.jnative.util.Kernel32.SystemTime;  
      6.   
      7. public class Demo {  
      8.     public static SystemTime GetSystemTime() throws NativeException, IllegalAccessException {  
      9.         // Kernel32.dll為dll名稱,Kernel32目錄的位置為:C:\Windows\System32下面,  
      10.         // GetSystemTime為Kernel32.dll中的一個方法.  
      11.         JNative nGetSystemTime = new JNative("Kernel32", "GetSystemTime");  
      12.         SystemTime systemTime = new SystemTime();  
      13.         // 設(shè)置參數(shù)  
      14.         nGetSystemTime.setParameter(0, systemTime.getPointer());  
      15.         nGetSystemTime.invoke();  
      16.         // 解析結(jié)構(gòu)指針內(nèi)容  
      17.         return systemTime.getValueFromPointer();  
      18.     }  
      19.   
      20.     public static void main(String[] args) throws NativeException, IllegalAccessException {  
      21.         System.err.println(GetSystemTime());  
      22.         System.exit(0);  
      23.     }  
      24. }  

      JNA方式調(diào)用dll

      JNA(Java Native Access)框架是一個開源的Java框架,是SUN公司主導(dǎo)開發(fā)的,建立在經(jīng)典的JNI的基礎(chǔ)之上的一個框架。
       首先下載JNA
      代碼:
      1. package com.tvjody;  
      2.   
      3. import com.sun.jna.Library;  
      4. import com.sun.jna.Native;  
      5. import com.sun.jna.Platform;  
      6.   
      7. public class JNA {  
      8.   
      9.     // 定義接口CLibrary,繼承自com.sun.jna.Library  
      10.     public interface testdll extends Library {  
      11.         // msvcrt為dll名稱,msvcrt目錄的位置為:C:\Windows\System32下面,  
      12.         testdll Instance = (testdll) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),  
      13.                 testdll.class);  
      14.         // printf為msvcrt.dll中的一個方法.  
      15.         void printf(String format, Object... args);  
      16.     }  
      17.   
      18.     public static void main(String[] args) {  
      19.         // 調(diào)用printf打印信息  
      20.         testdll.Instance.printf("yyyyMMdd");  
      21.     }  
      22.   
      23. }  

      JNI調(diào)用dll

      如果有一個現(xiàn)有的.dll/.so文件,如果使用JNI技術(shù)調(diào)用,我們首先需要另外使用C語言寫一個.dll/.so共享庫,使用SUN規(guī)定的數(shù)據(jù)結(jié)構(gòu)替代C語言的數(shù)據(jù)結(jié)構(gòu),調(diào)用已有的dll/so中公布的函數(shù)。
      然后再在Java中載入這個適配器dll/so,再編寫Java   native函數(shù)作為dll中函數(shù)的代理。經(jīng)過2個繁瑣的步驟才能在Java中調(diào)用本地代碼。
      因此,很少有Java程序員愿意編寫調(diào)用dll/.so庫中的原生函數(shù)的java程序。這也使Java語言在客戶端上乏善可陳??梢哉fJNI是Java的一大弱點!只提供幾個鏈接吧!
      http://blog.sina.com.cn/s/blog_6c3b9ed40100xyl8.html
      http://www./home/space-37924-do-blog-id-5681.html
      以上源代碼下載


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多