前言
人生如逆旅,我亦是行人
背景
写完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下载)