前言
人生如逆旅,我亦是行人
背景
寫完C++,寫Java調用Demo
環境
VS2017、IDEA、JNA5.5
JNI(太複雜),JNative(最高版本1.4,只支持32位JDK1.7,踩坑)
一、準備DLL(Release X64位)
C++生成DLL步驟不做介紹了,注意點:使用extern生成C語言庫,原因是C++編譯器會更改函數名
二、測試調用
將dll放在項目根目錄,並導入JNA的jar包
package qskernel;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class QsKernel {
/// \brief 加載dll,
public interface CLibrary extends Library
{
CLibrary INSTANCE = (CLibrary) Native.load("dll名稱", CLibrary.class);
//註冊dll的函數,名稱、參數對應
String openFolderDialog();
}
public static void main(String[] args)
{
try
{
String folderPath = CLibrary.INSTANCE.openFolderDialog();
System.out.println(folderPath);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
注意
- 函數參數和返回參數對應,例如C++中的char*和Java中String對應
- 本文只是簡單Demo,涉及到複雜調用可查看官網(以及JNA下載)