以下问题已被修改以缩小问题范围,
我正在尝试使用 JNA 使用来自 Java 的本机 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 Mapping,
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();
}
}
本机方法 -> 为便于阅读而修改,
int _methodXYZ(PDU_RSC_DATA* obj);
Java 调用 -> 仅显示所需的片段,
PDU_RSC_DATA obj = new PDU_RSC_DATA();
_methodXYZ(obj);
请让我知道 struct* 在结构中的上述映射是否正确。从 DLL 日志中,我注意到PDU_PIN_DATA pDLCPinData的值无效。