最近在嘗試用樹莓派控制海康機器人的相機,採用JAVA技術棧,發現相同的SDK接口函數
int MV_CC_SaveImageEx2(
IN void* handle,
MV_SAVE_IMAGE_PARAM_EX *pSaveParam
);
,用JNI調用OK,用JNA調用就
經過幾天艱苦的定位,推測是因爲MV_SAVE_IMAGE_PARAM_EX裏的MvGvspPixelType枚舉字段爲8字節,而JNA分配的native內存爲4字節,從而引發問題。
爲什麼樹莓派這麼個armv71
平臺,其枚舉類型會出現8字節的size?老實說我目前也不知道原因,不過我想先記錄下異常現象。
復現異常
爲了方便說明問題,將MvGvspPixelType簡化(已將無關的宏消除)成PixelType
#include <stdio.h>
enum PixelType{
MONO = -1,
RGB = 0x80000000
};
int main(){
printf("sizeof enum PixelType = %d\n", sizeof(enum PixelType));
printf("MONO = 0x%x\n", MONO);
printf("RGB = 0x%llx\n", RGB);
return 0;
}
運行輸出結果
sizeof enum PixelType = 8
MONO = 0xffffffff
RGB = 0x80000000
繼續實驗
把末項的最高位改成0
如果將RGB