我正在尝试使用 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/