簡體   English   中英

如何使用JNA將帶有FAR PASCAL的結構與array [1 + 1]和方法從C映射到Java?

[英]How to map struct wtih array[1+1] and method with FAR PASCAL from C to Java using JNA?

我需要創建Java接口以從DLL調用方法。 我不確定下面的Java代碼是否正確。

我已經在使用JNA 5.4和Java 11。

在C中構造:

typedef struct
{
    char CarId[8 + 1];
    char CarCode[5 + 1];
    char PrimaCarStatus[24 + 1];
}Cars;

C語言中的方法:

extern "C" __int32 _stdcall FAR PASCAL  DG18_Search(Cars *CarsData);

應該看起來像這樣嗎?

Java類

public class Cars extends Struct {
    public byte carId[] = new byte[8];
    public byte carCode[] = new byte[5];
    public byte primaCarStatus[] = new byte[24];
}

Java方法

public int DG18_Search(Pointer pointer); 

在C中,array [1 + 1]和FAR PASCAL到底是什么意思?

歡迎使用StackOverflow, JustCoding

您看到的+1只是簡單的加法,因此您需要在字節數組的值上加1才能正確映射。 我懷疑+1的目的是為了顯示一定數量的1字節字符的空間,如果需要的話,還可以為空終止符加上一個空格。

但是,您映射的Java語法錯誤,但是您需要聲明數組類型,因此正確的映射是:

public class Cars extends Structure {
    public byte[] carId = new byte[9];
    public byte[] carCode = new byte[6];
    public byte[] primaCarStatus = new byte[25];
}

(或者,您可以根據需要保留8 + 1樣式編號。)請注意,要擴展的JNA類是Structure而非Struct

至於功能/方法映射,您可以閱讀有關FAR PASCAL的Fifi鏈接,但是除非您是為真正的古老操作系統而構建,否則可以放心地忽略它們。 雖然Pointer適用於映射,但它允許您將任何Pointer或Structure傳遞給方法。 最好使用類型安全性並將Cars變量放入該函數調用中:JNA將在方法參數中自動使用結構的指針( Cars.ByReference ),並將結果自動讀取到本地變量中,因此:

public int DG18_Search(Cars cars); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM