- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的问题已被修改以缩小问题范围,
我正在尝试通过 JNA 使用 Java 的 native dll。我对 Java 和 JNA 都很陌生。对于对 dll 导出函数之一的特定调用,它返回无效参数。
这是结构,
PDU_RSC_DATA 是一个引用另一个结构体 PDU_PIN_DATA 的结构体,
typedef struct {
UNUM32 BusTypeId;
UNUM32 ProtocolId;
UNUM32 NumPinData;
PDU_PIN_DATA *pDLCPinData;
} PDU_RSC_DATA;
这就是 PDU_PIN_DATA 结构的样子,
typedef struct {
UNUM32 DLCPinNumber;
UNUM32 DLCPinTypeId;
} PDU_PIN_DATA;
对应的JNA映射,
public class PDU_RSC_DATA extends Structure{
public int BusTypeId;
public int ProtocolId;
public int NumPinData;
public Pointer pDLCPinData;
}
public class PDU_PIN_DATA extends Structure implements Structure.ByReference{
public int DLCPinNumber;
public int DLCPinTypeId;
public PDU_PIN_DATA(){
}
public PDU_PIN_DATA(Pointer ptr_PDU_PIN_DATA) {
super(ptr_PDU_PIN_DATA);
read();
}
}
native 方法 -> 已修改以方便阅读,
int _methodXYZ(PDU_RSC_DATA* obj);
Java 调用 -> 仅显示所需的代码片段,
PDU_RSC_DATA obj = new PDU_RSC_DATA();
_methodXYZ(obj);
请告诉我上述 struct* 在结构中的映射是否正确。从 DLL 日志中,我注意到 PDU_PIN_DATA pDLCPinData 的值无效。
最佳答案
使用 NativeLong
(或 Windows 上的 int
)作为 native long
类型。 Java long
是 64 位,这肯定不是您想要的。
编辑JNA 默认使用结构指针作为函数参数,并在结构中默认使用值结构。为了获得互补的行为,请分别使用 Structure.ByValue
和 Structure.ByReference
。
如果您的结构体字段是指针,请使用实现 Structure.ByReference
的结构体版本。 JNA 通常会在 native 调用之前和之后自动处理 native 内存与 java 字段的同步。
关于java - ProJNA 数据类型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754490/
下面的问题已被修改以缩小问题范围, 我正在尝试通过 JNA 使用 Java 的 native dll。我对 Java 和 JNA 都很陌生。对于对 dll 导出函数之一的特定调用,它返回无效参数。 这
我是一名优秀的程序员,十分优秀!