程序员日更挑战集锦Java

Java | 通过JNA调用c语言dll

2020-02-28  本文已影响0人  峰眼看世界
java

之前发在我的CSDN博客中,现在搬到简书上来。

Java可以通过JNI/JNA调用本地其他语言生成的库文件。以调用c语言为例,可以将c的函数导出dll,java通过JNI/JNA来调用。

本文涉及范围

JNI vs JNA

JNI JNA
c和Java互调 只能Java调c
编写复杂,需要先根据Java生成对应c的函数声明,然后用c来完成函数实现,最后生成dll,供Java调用 直接由c生成dll供Java调用
性能优于JNA 底层调用JNI

Java通JNA调用dll

    // myDll.h
    #define JNADLL extern "C" __declspec(dllexport)
    JNADLL int add(int x, int y);
    
    // myDll.cpp
    #include "myDll.h"
    void int add(int x, int y)
    {
        return x + y;
    }
    // dll接口
    public interface JNATestDll extends Library   
    {
        JNATestDll instanceDll  = (JNATestDll)Native.loadLibrary("myDll",JNATestDll.class);
        public int add(int x, int y);
    }
    
    // 测试驱动
    public class CallDLLJNA 
    {
        public static void main(String[] args) 
        {
            JNATestDll jnaDemo=JNATestDll.instanceDll;
            int c = jnaDemo.add(1, 2);
            System.out.println(c);
        }
    }

不得不看

 #define JNADLL extern "C" __declspec(dllexport)
JNADLL int add(int x, int y);

原始博客地址


图片源自网络,侵权必删!

上一篇下一篇

猜你喜欢

热点阅读