下面的問題已被修改以縮小問題範圍,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