У меня есть Java-приложение, которое использует jna для вызова 64-битной сторонней библиотеки DLL для связи со сканерами (с собственными 64-битными драйверами). Я получаю недопустимую ошибку доступа к памяти с комбинацией windows 10 / java11 / jna, которую не получаю ни с какой другой комбинацией.
Этот код отлично работает на всех следующих без ошибок:
- Windows 7/64-битная среда выполнения Java 8
- Windows 7/64-битная среда выполнения Java 11
- Windows 10/64 бит java 8 runtime
Я использую последнюю и лучшую версию jna (5.3.1), а также пробовал более старые версии с тем же результатом.
/* Open Scanner */
EZT.TWAIN_SetHideUI(true);
if (EZT.TWAIN_GetSourceList()) {
if (!EZT.TWAIN_OpenDefaultSource()) {
throw new RuntimeException("Cannot open scanner");
}
}
/* Retrieve scanner capabilities for resolution */
int hcon = EZT.TWAIN_Get(EZLibrary.ICAP_XRESOLUTION);
if (hcon != 0) {
int resolutions[] = new int[EZT.CONTAINER_ItemCount(hcon)];
...
}
.....
private interface EZLibrary extends Library {
int ICAP_XRESOLUTION = 4376;
void TWAIN_SetHideUI(boolean bHide);
boolean TWAIN_GetSourceList();
boolean TWAIN_OpenDefaultSource();
int TWAIN_Get(int uCap);
int CONTAINER_ItemCount(int hcon);
}
Вызов «EZT.CONTAINER_ItemCount (hcon)» в этом примере возвращает ошибку недопустимого доступа к памяти. Однако, когда этот код является частью моего более крупного приложения, а не этого примера приложения, та же самая последовательность кодов поднимает ошибку доступа к недопустимой памяти выше при "EZT.TWAIN_OpenDefaultSource ()".
Итак, в итоге:
У меня возникает вопрос, есть ли проблема с JNA с win 10 / java 11 или это что-то в стороннем коде, или я что-то не так делаю?