以下の質問は、問題を絞り込むために修正されました。
JNA を使用して Java からネイティブ dll を使用しようとしています。私はJavaとJNAの両方が初めてです。dll のエクスポートされた関数の 1 つに対する特定の呼び出しでは、無効なパラメーターが返されます。
構造体は次のとおりです。
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);
上記の struct* 内の構造体のマッピングが正しいかどうか教えてください。DLL ログから、PDU_PIN_DATA pDLCPinDataの値が無効であることがわかりました。