2016-05-04 76 views
0

我相對較新使用JNA,並找到JNAerator工具。我認爲這將是一個簡單的方法,但是,我如何生成我的接口和各種文件,我發現很難調試或理解爲什麼它可能無法正常工作。 Windows編程中是不是我的專長,所以用JNA,使生活容易爲自己的嘗試...JNA/Java使用JNAerator和ftd2xx庫

頭文件是在這裏:http://www.ftdichip.com/Support/Knowledgebase/index.html?ftd2xx_h.htm

而且它產生了以下Java JNA文件位置:http://pastebin.com/hpJgSRMk

現在我的示例應用程序只是想列出這些連接的設備,我可以再重複左右和操縱等。

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的webstarted版本。

回答

0

如果你對指針沒有足夠的理解,那麼你陷入了一個混亂的世界。您的電話需要一個指向DWORD(Java int)的指針。你傳入一個,但它的默認值爲零,這與NULL指針相同。如果使用IntByReference,那麼在調用之後,至少可以使用IntByReference.getValue()來查看通過它的內存緩衝區中本機方法「返回」的內容。