Java调用C++函数

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就完成了。

给点个赞,收藏一下吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值