添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
跑龙套的手链  ·  SQL Alter Table ...·  2 年前    · 
爱看球的小马驹  ·  python ...·  2 年前    · 

int &a 和 a 的区别

C语言中的a是一个变量,储存着值。&a是常量,是变量a的内存地址。一般的&a是用来赋值给指针的(int *p=&a ;),或者是作为函数的参数传递(地址传递)

在java中对应&a 指针地址的引用变量为 com.sun.jna.ptr. IntByReference 或者 byte[]

将dll 放到resources 下面

引入的 JNA 的 Maven配置

        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>5.8.0</version>
        </dependency>

JAVA代码实现

package com.example.demo;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 * jvm 64位程序执行64位dll
 * jvm 32位程序执行32位dll
@RestController
@RequestMapping("/test")
public class AddController {
    public interface AddLib extends Library {
        AddLib instance = Native.load("lib64/test", AddLib.class);
        //int Add1(byte[] a,byte[] b); // 对应C 语言程序 int Add1(int &a,int &b)
        //int Add1(Object a, Object b);// 对应C 语言程序 int Add1(int &a,int &b)
        int Add1(IntByReference a, IntByReference b);// 对应C 语言程序 int Add1(int &a,int &b)
        int Add2(int a, int b); // 对应C 语言程序 int Add1(int a,int b)
    @GetMapping("/add1")
    public static int Add1() {
        Integer a = new Integer(1258);
        Integer b = new Integer(2);
        return AddLib.instance.Add1(new IntByReference(a), new IntByReference(b));
//        return AddLib.instance.Add1(toLH(a),toLH(b));
    @GetMapping("/add2")
    public int Add2() {
        return AddLib.instance.Add2(2, 3);
    @GetMapping()
    public String st() {
        return "hello test add";
    public static void main(String[] args) {
        int d = AddLib.instance.Add2(112, 22);
        System.out.println("=============" + d);
        d = Add1();
        System.out.println(d);
    public static byte[] toLH(int n) {
        byte[] b = new byte[4];
        b[0] = (byte) (n & 0xff);
        b[1] = (byte) (n >> 8 & 0xff);
        b[2] = (byte) (n >> 16 & 0xff);
        b[3] = (byte) (n >> 24 & 0xff);
        return b;
    public static byte[] toHH(int n) {
        byte[] b = new byte[4];
        b[3] = (byte) (n & 0xff);
        b[2] = (byte) (n >> 8 & 0xff);
        b[1] = (byte) (n >> 16 & 0xff);
        b[0] = (byte) (n >> 24 & 0xff);
        return b;
                    Java用JNA调用dll : Invalid memory access问题描述java通过JNA调用C/C++ dll时,报Invalid memory access问题原因经过分析原因是数据类型不匹配问题int &amp;a 和 a 的区别C语言中的a是一个变量,储存着值。&amp;a是常量,是变量a的内存地址。一般的&amp;a是用来赋值给指针的(int *p=&amp;a ;),或者是作为函数的参数传递(地址传递)在java中对应&amp;a 指针地址的...
				
我需要实现从APP跳转到bootloader,参考ble_app_buttonless_dfu例程,只不过不是通过nrf_connect来触发跳转,而是在收到云端的升级信息后,跳转到bootloader,所以,我直接借鉴了ble_app_buttonless_dfu例程的main.c中的这个函数的方法。 static void buttonless_dfu_sdh_state_observer(nrf_sdh_state_evt_t state, void * p_context) if (st
回顾去年项目需求上需要使用算法封装好的动态库,楼楼使用的是jna调取动态库。开发过程中,就是一个爬坑之旅,在此记录下爬过的坑。 1.位数问题 使用jna需要关注到动态库位数,服务器系统位数,为此选定合适的jdk。jdk位数需要跟dll位数一致,主机64位可以调取32位或者64位,而主机是32位系统则只能调取32位dll。 当然要是算法库是公司自主研发,建议让开发动态库人员先到服务器上测试环境。
参考资料: https://blog.csdn.net/ctwy291314/article/details/82895604Java JNA (三)—— 结构体使用及简单示例 https://www.jianshu.com/p/ead89497c403 JNA 教程 1.引入依赖 <dependency> <groupId>net.java.dev.jna</groupId> <art...
java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more 大脚牛向前冲: 终于好了,哭了,从早上9点搞到下午6点 java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more 大脚牛向前冲: 终于好了,哭了,从早上9点搞到下午6点