2016-05-04 4 views
0

Я относительно новичок в использовании JNA и нашел инструмент JNAerator. Я думал, что это будет простой способ добиться успеха, однако, как я создал свои интерфейсы и различные файлы, мне сложно отлаживать или понимать, почему это может не работать. Программирование для Windows не является моей сильной стороной, поэтому попытка с ЮНА, чтобы сделать жизнь легкой для себя ...JNA/Java с использованием библиотек JNAerator и ftd2xx

Файл заголовка здесь: http://www.ftdichip.com/Support/Knowledgebase/index.html?ftd2xx_h.htm

И генерируется следующая Java ЮНА Файл здесь: http://pastebin.com/hpJgSRMk

Теперь мой образец App просто пытается перечислить те подключенные устройства, которые я могу затем перебирать вокруг и манипулируют и т.д ..

import com.sun.jna.NativeLong; 

import ft2xx.Ftd2xxLibrary; 
import ft2xx.Ftd2xxLibrary.LPDWORD; 

public class Test { 
    public static void main(String[] args){ 
     LPDWORD lpd = new LPDWORD(); 
     NativeLong nl = Ftd2xxLibrary.INSTANCE.FT_CreateDeviceInfoList(lpd); 
     System.out.println("Call State: " + nl); 
    } 
} 

Это после того, что я прочитал здесь: http://www.ftdichip.com/Support/Documents/ProgramGuides/D2XX_Programmer's_Guide(FT_000071).pdf в котором подробно описано, как перечислить подключенные устройства, которые затем можно повторить и т. д.

Итак, мой метод возвращает 6, что указывает на недопустимый параметр, но при условии, что я автоматически сгенерировал код, и это не складывается, я немного не знаю, как это сделать.

Я использовал JNAerator, учитывая огромное количество методов, которые мне нужно было реализовать и использовать, и я полагал, что JNA и такой сгенерированный код будут достаточно легкими, чтобы сделать работу для этой конкретной цели.

Любые подсказки, или я должен вернуться к основам?

Я нахожусь в Windows 7, используя Eclipse (Mars) и веб-версию JNAerator.

ответ

0

Если у вас нет правильного понимания указателей, вы находитесь в мире замешательства. Ваш вызов ожидает указатель на DWORD (Java int). Вы передаете одно, но оно имеет значение по умолчанию, равное нулю, которое совпадает с указателем NULL. Если вы используете IntByReference, вы можете, по крайней мере, использовать IntByReference.getValue() после вызова, чтобы узнать, что нативный метод «возвратил» вам в буфер памяти, который вы передали.