java - JNA 通过引用传递结构帮助

标签 java c struct pass-by-reference jna

我正在尝试使用 JNA 通过插入计算机的 USB 设备进行通话。使用 Java 和提供给我的 .dll。我在使用 Write 函数时遇到问题:

C 代码:

typedef struct {
    unsigned int id;
    unsigned int timestamp;
    unsigned char flags;
    unsigned char len;
    unsigned char data[16];
} CANMsg;

CAN_STATUS canplus_Write(
        CANHANDLE handle, //long
        CANMsg *msg
    );

Java 等价物:

public class CANMsg extends Structure{
    public int id = 0;
    public int timestamp = 0;
    public byte flags = 0;
    public byte len = 8;
    public byte data[] = new byte[16];
}

int canplus_Write(NativeLong handle, CANMsg msg);

我已确认我可以打开和关闭设备。关闭需要 NativeLong 句柄,所以我假设 CANMsg 消息是这里的问题。我还确认该设备在使用纯 C 代码进行测试时可以正常工作。

我已经彻底阅读了 JNA 文档……我想。任何指针。谢谢大家。

最佳答案

我对 JNA 了解不多,但当指针作为简单地址传输时,跨语言数据传输通常会失败。

如果您要发送的是它指向的数据,则可能在某处调用了打包方法。如果不是您自己编写的,也许它是由这个 JNA 框架生成的...将其添加到您的问题中可能会有用。

将 C 字符映射到 Java 字节对我来说也有点奇怪,但我知道它可能来自哪里。您在什么操作系统上运行此代码?

关于java - JNA 通过引用传递结构帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/934897/

相关文章:

java - 如何使用 Spring 加载属性文件?

c - 正确使用 fprintf

c - 为什么freetype渲染出来的文字总是有些杂音?

go - 动态函数返回类型

java - 为什么 gluProject 不使用 LWJGL 给出正确的屏幕空间坐标

java - netbeans 8.0.2 - 无法正确打印 utf-8 字符

c - 传递许多变量与传递结构

ios - 是否有可能创建对结构数组元素的引用?

javascript - 在 Freemarker 模板中的 Javascript 中运行 Java 方法

c - Rand() 似乎无法正常工作