zoukankan      html  css  js  c++  java
  • Java通过jna调用c++动态库

    1 环境准备

    操作系统:windows 10,x64

    jna,jna-4.4.0.jar

    c++开发环境,vc2013

    java开发环境,eclipse,jdk8

    2 dll开发

    通过vc2013创建动态库(dll)工程项目JnaTestDll,编写需要导出的函数定义及实现,如下:

    JnaTestDll.h

    #ifdef JNATESTDLL_EXPORTS

    #define JNATESTDLL_API __declspec(dllexport)

    #else

    #define JNATESTDLL_API __declspec(dllimport)

    #endif

     

    extern "C" JNATESTDLL_API int Add(int a, int b);

    extern "C" JNATESTDLL_API int Sub(int a, int b);

    JnaTestDll.cpp

    #include "stdafx.h"

    #include "JnaTestDll.h"

     

     

    // 这是导出函数的一个示例。

    extern "C" JNATESTDLL_API int Add(int a, int b)

    {

        return a + b;

    }

     

    extern "C" JNATESTDLL_API int Sub(int a, int b)

    {

        return a - b;

    }

    配置环境选择Release x64

     

    编译生成JnaTestDll.dll。

    3 java调用dll

    使用eclipse创建java应用工程项目,build path引入jna-4.4.0.jar。

    将JnaTestDll.dll拷到java工程根目录(和src同一目录)。

    编写接口类JnaTestDll

    package com.kld.jnatest;

     

    import com.sun.jna.Library;

    import com.sun.jna.Native;

     

    public interface JnaTestDll  extends Library

    {

          JnaTestDll INSTANCE = (JnaTestDll)Native.loadLibrary("JnaTestDll", JnaTestDll.class);

          public int Add(int a, int b);

          public int Sub(int a, int b);

    }

    main函数中调用

    int add = JnaTestDll.INSTANCE.Add(2, 1);

    int sub = JnaTestDll.INSTANCE.Sub(2, 1);

    System.out.println("Add(2,1) = " + add);

    System.out.println("Sub(2,1) = " + sub);

    输出结果如下所示:

     

  • 相关阅读:
    【转】kafka&zookeeper集群搭建指南
    spark-streaming问题集锦
    Rokid开发者社区skill之【历史上的今天】
    jQuery+Ajax获取百度百科历史上的今天
    python+xpath+requests爬取维基百科历史上的今天
    jQuery请求维基百科[历史上的今天]
    Redis和Memcached比较
    [转]RosBridge小结
    [转]使用rosbridge协议实现安卓跟ros的解耦
    跨域访问之jsonp
  • 原文地址:https://www.cnblogs.com/aurain/p/9878025.html
Copyright © 2011-2022 走看看