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

输出结果如下所示:

 

原文地址:https://www.cnblogs.com/aurain/p/9878025.html