Неверный доступ к памяти с 64-битными DLL на Windows 10 только с Java11 - PullRequest
0 голосов
/ 27 июня 2019

У меня есть 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 ()".

Итак, в итоге:

  • windows 7 / java 8: ожидаемые результаты
  • windows 7 / java 11: ожидаемые результаты
  • windows 10 / java 8: ожидаемые результаты
  • windows 10 / java 11:

    java.lang.Error: Неверный доступ к памяти в com.sun.jna.Native.invokeInt (родной метод) в com.sun.jna.Function.invoke (Function.java:426) в com.sun.jna.Function.invoke (Function.java:361) в com.sun.jna.Library $ Handler.invoke (Library.java:265) в com.sun.jna.Native $ 3.invoke (Native.java:1202) на $ Proxy0.CONTAINER_ItemCount (Неизвестный источник)

У меня возникает вопрос, есть ли проблема с JNA с win 10 / java 11 или это что-то в стороннем коде, или я что-то не так делаю?

...