[英]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.