下面的问题已被修改以缩小问题范围,ProJNA数据类型映射
我想从Java使用JNA使用原生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();
}
}
本机方法 - >修改易于读取,
int _methodXYZ(PDU_RSC_DATA* obj);
Java调用 - >仅显示所需的片段,
PDU_RSC_DATA obj = new PDU_RSC_DATA();
_methodXYZ(obj);
请让我知道,如果结构*的结构内的上述映射是正确的。从DLL日志中我注意到PDU_PIN_DATA pDLCPinData具有无效值。
该字段是否有无效的指针值,或PDU_PIN_DATA结构中的字段是否具有无效值。 – technomage