1) vc++ 新建动态链接库工程
2)不适用预编译头
右击项目一配置属性一C/C++一预编译头一不使用预编译头
添加cpp 文件和 .h 头文件
#include "pch.h"
#include "JnaDLL.h"
#include <iostream>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int test(const char* c) {
std::cout << c << std::endl;
return 0;
}
#pragma once
#ifndef JNA_TEST_H
#define JNA_TEST_H
#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport) int add(int a, int b); // 加法
__declspec(dllexport) int sub(int a, int b); // 减法
__declspec(dllexport) int test(const char* c); // const char* 类型对应 Java 的 String 类型
#ifdef __cplusplus
}
#endif
#endif //JNA_TEST_H
3) 生成dll
使用java调用
package me.giraffetree.jnafunc;
import com.sun.jna.*;
import lombok.Data;
/**
* @author GiraffeTree
* @date 2019/10/25
*/
public class Hello2 {
public interface JnaLibrary extends Library {
// JNA 为 dll 名称
JnaLibrary INSTANCE = Native.load("add", JnaLibrary.class);
int add(int a, int b);//加法
int sub(int a, int b);//减法
int test(String c);//字符串
}
public static void main(String[] args) {
testMax();
}
public static void testMax() {
int max = JnaLibrary.INSTANCE.add(100, 200);
// out: 200
System.out.println(max);
}
}
代码已上传, java 和 c++