0.完整代码
完整代码连接:szm/Java-C
里面包含.dll文件和Java代码
1.qt编译dll
编译出一个.dll文件:
其中C函数为:
完整头文件Dll.h如下
#ifndef FIRSTDLL_H
#define FIRSTDLL_H
#include "firstDll_global.h"
class FIRSTDLL_EXPORT FirstDll
{
public:
FirstDll();
};
#endif // FIRSTDLL_H
extern "C"{
int addval(int a,int b);
}
完整dll.cpp如下
#include "testdll.h"
#include<iostream>
using namespace std;
TestDll::TestDll()
{
}
Q_DECL_EXPORT int addval(int a,int b)
{
cout<<"a+b="<<a+b<<endl;
return a+b;
}
2.Java代码
添加依赖
<dependency>
<groupId>com.quantxt.core</groupId>
<artifactId>qt-core</artifactId>
<version>2.59</version>
</dependency>
代码
package cn.szm.dll;
import com.sun.jna.Library;
import com.sun.jna.Native;
public interface Main extends Library {
// Main instance = Native.load("Modubs", Main.class);
Main instance = Native.load("firstDll", Main.class);
int addval(int a, int b);
}
解释:
Native.load("dll文件名称", 接口名称.class):表示读取dll文件,并加载这个接口
addval(int a, intb):这个方法要和C++函数的函数名称、参数、返回值类型保持一致
package cn.szm.controller;
import cn.szm.dll.Main;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lenovo
*/
@RestController
@RequestMapping("/main")
public class MainController {
@GetMapping("/add")
public String add(int a, int b) {
// 获取接口对象
Main m = Main.instance;
// 调用方法
int res = m.addval(a, b);
// 数据接口
System.out.println("a + b = " + res);
return "a + b = " + res;
}
}
运行结果
到此,一个简单的demo就完成了。
给点个赞,收藏一下吧。