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

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

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)); 
    } 
}
 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产视频一区 | 亚洲精品午夜在线观看 | 思思玖玖玖在线精品视频 | 欧美日韩一品道 | 国产欧美另类 | 日本不卡免免费观看 | 日本高清在线播放 | 97久久免费视频 | 1024免费福利永久观看网站 | 久久re这里精品23 | 黑人性xxx | 国产自拍视频网站 | 韩国最新理论三级在线观看 | 星空无限传媒视频在线观看视频 | 无码AV熟妇素人内射V在线 | 国产激情视频 | 俄罗斯伦理片 | 扒开斗罗美女了的胸罩和内裤漫画 | 九九精品视频在线播放 | 国产高清不卡视频在线播放 | 隔壁老王国产在线精品 | 欧美在线看片a免费观看 | 国产精品探花一区在线观看 | 九九九好热在线 | 国产日韩欧美在线一区二区三区 | 99热这里只有精品免费 | 丝瓜秋葵番茄绿巨人在线观看 | 亚洲视频在线一区二区三区 | 日本高清免费中文字幕不卡 | 精品推荐国产麻豆剧传媒 | 女女同性做爰xxoo亲吻 | 午夜精品网 | 欧美三茎同入 | 日本成人高清视频 | 免费一级特黄特色大片∵黄 | japanesexxxx日本妞 | 成人免费体验区福利云点播 | 四虎黄色影视库 | 秋霞理论在一l级毛片 | 亚洲欧美视频在线播放 | 调教全程肉动画片在线观看 |