1 環境準備java
操做系統:windows 10,x64c++
jna,jna-4.4.0.jarwindows
c++開發環境,vc2013eclipse
java開發環境,eclipse,jdk8函數
2 dll開發ui
經過vc2013建立動態庫(dll)工程項目JnaTestDll,編寫須要導出的函數定義及實現,以下:操作系統
JnaTestDll.hblog
#ifdef JNATESTDLL_EXPORTS接口
#define JNATESTDLL_API __declspec(dllexport)ip
#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);
輸出結果以下所示: