一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java使用JNA(Java Native Access)調用dll的方法

java使用JNA(Java Native Access)調用dll的方法

2019-10-18 13:11java技術網 Java教程

java使用JNA(Java Native Access)調用windows系統的dll文件的例子

JNA(Java Native Access):建立在JNI之上的Java開源框架,SUN主導開發,用來調用C、C++代碼,尤其是底層庫文件(windows中叫dll文件,linux下是so【shared object】文件)。
JNI是Java調用原生函數的唯一機制,JNA就是建立在JNI之上,JNA簡化了Java調用原生函數的過程。JNA提供了一個動態的C語言編寫的轉發器(實際上也是一個動態鏈接庫,在Linux-i386中文件名是:libjnidispatch.so)可以自動實現Java與C之間的數據類型映射。從性能上會比JNI技術調用動態鏈接庫要低。
1.簡單寫個windows下的dll,文件命名為forjava.dll,其中一個add函數,采用stdcall調用約定

復制代碼代碼如下:


main.h文件
#ifndef __MAIN_H__ 
#define __MAIN_H__ 

#include <windows.h> 

/*  To use this exported function of dll, include this header 
 *  in your project. 
 */

#ifdef BUILD_DLL 
    #define DLL_EXPORT __declspec(dllexport) __stdcall 
#else 
    #define DLL_EXPORT __declspec(dllimport) __stdcall 
#endif 

#ifdef __cplusplus 
extern "C"

#endif 

int DLL_EXPORT add(int a,int b); 

#ifdef __cplusplus 

#endif 

#endif // __MAIN_H__

 

main.cpp

#include "main.h" 

// a sample exported function 
int DLL_EXPORT add(int a ,int b) 

    return a+b; 


extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 

    switch (fdwReason) 
    { 
        case DLL_PROCESS_ATTACH: 
            // attach to process 
            // return FALSE to fail DLL load 
            break; 

        case DLL_PROCESS_DETACH: 
            // detach from process 
            break; 

        case DLL_THREAD_ATTACH: 
            // attach to thread 
            break; 

        case DLL_THREAD_DETACH: 
            // detach from thread 
            break; 
    } 
    return TRUE; // succesful 
}
 


2.將jna.jar導入eclipse工程中,java代碼如下

復制代碼代碼如下:

//import com.sun.jna.Library; cdecl call調用約定 
import com.sun.jna.Native; 
import com.sun.jna.Platform; 
import com.sun.jna.win32.StdCallLibrary; 

public class main { 

    public interface CLibrary extends StdCallLibrary { //cdecl call調用約定時為Library 
        CLibrary INSTANCE = (CLibrary)Native.loadLibrary("forjava",CLibrary.class); 
        public int add(int a,int b); 
    } 

    public static void main(String[] args) { 
        System.out.print(CLibrary.INSTANCE.add(2,3)); 
    } 
}
 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品欧美日韩一区二区 | 精品AV综合导航 | 好男人资源免费观看 | 欧美xxxbrazzers| 精品国产自在现线拍400部 | 好大好猛好爽好深视频免费 | 五月婷婷丁香色 | 草草视频在线观看最新 | 999久久免费高清热精品 | 日本精品一卡二卡≡卡四卡 | 日本三级欧美三级人妇英文 | 亚洲精品中文字幕第一区 | 国产区综合另类亚洲欧美 | 婷婷影院在线观看 | 国产福利微拍精品一区二区 | 色噜噜视频影院 | 被强迫变性翘秘书 | 亚洲欧美成人综合 | 8x8x拔插| 艾秋果冻麻豆老狼 | 2012中文字幕中字视频 | 国产欧美又粗又猛又爽老 | 91无毒不卡| 二次元美女互摸隐私互扒 | 91免费播放人人爽人人快乐 | 国产成人综合亚洲亚洲欧美 | 色综合网天天综合色中文男男 | 女人国产香蕉久久精品 | 日本综合在线观看 | 青青草原网 | 青青青在线视频播放 | 91se在线 | 国产高清在线播放刘婷91 | free哆拍拍免费永久视频 | 性关系视频网站 | 无限好资源第一片免费韩国 | 男人女人日批 | 日本69av | 亚洲国产果果在线播放在线 | 久久久久免费视频 | 国产精品久久久久网站 |