跳至內容

JavaNativeAccess

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 13:02 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

Java Native Access(JNA) 是一个社群開發的庫,伊使 Java 程式毋免使用 Java Native Interface 就會當輕鬆存取本地共享庫。JNA 的設計旨佇以上少的努力以原生的方式提供本地存取,而且無需要樣板代碼或膠水代碼。

結構

JNA 庫使用一个叫做外部函式介面庫(libffi)的小型本機庫來動態呼叫本機代碼。JNA 庫使用本地的函式,允准代碼照名稱載入庫並檢索指向該庫中函式的指標,使用 libffi 庫來共呼叫,煞無需要靜態結束,標頭檔抑是任何編譯。開發人員使用 Java interface 描述目標本機庫內底的函式佮結構(struct)。 這予得利用平台功能非常容易,避免組態猶閣有構建的 JNI 的懸開銷。

JNA 支援佇咧 macOS,Microsoft Windows,FreeBSD / OpenBSD,Solaris,GNU / Linux,AIX,Windows Mobile 和 Android 上構建和測試。經過適當的調整佮重編譯,會使其實佇大多數會使執行 Java 的平台頂執行。

類型對應

這个表格顯示矣 JNA 所支援的類型佮 java 類型,Windows 通用類型的對應關係 .

注意:根據一寡前置處理器指令佮無仝的實現,TCHAR 可能為 char 抑是 wchar \ _ t。LPCTSTR 嘛是仝款的。

資料結構的記持體位元組對齊

JNA 無規定的記持體位元組的對齊方式。JNA 預設為遵循 OS 平台的設定,但是嘛是會當自訂對齊的方式。若準本機庫的文件無提供關於記憶體對齊的詳細資訊,著愛通過試驗確定著愛正確的對齊方式。

範例

下跤這个例展示矣 JNA 欲按怎載入 C 標準庫並使用其中的 printf 函式。

注意 :這个例是無仝款台的,這意味著伊會當佇 Windows / GNU + Linux / Unix / macOS 執行,並且得著完全仝款的結果。

下跤這个例使用矣 C POSIX 庫並呼叫其中的 mkdir 函式。

注意 :這个例佇咧 POSIX 相容的系統內底是迒平台的,這意味著伊會當佇所有 POSIX 相容系統中執行並得著相仝結果,但是伊無法度佇大多數 Windows 系統上執行。

下跤這个例載入去矣 Kernel 三十二 . dll 並且呼叫其中的 Beep 和 Sleep 函式。

注意 :這个例干焦會當佇 Windows 下執行。

用處

JNA 被用佇下列專案當中:

  • Armed Bear Common Lisp , 使用 JNA 實現 CFFI。
  • JRuby , 使用 JNA 實現 POSIX 相關功能。
  • Freedom for Media in Java ( FMJ )。
  • JetBrains 的 IntelliJ IDEA。
  • OpenSearchServer , 一个開源搜揣 ia̋n-jín。
  • SVNKit , 一个純 Java 的 Java Subversion client 庫,通過 JNA 實現相關功能。
  • VLC media player , 佇咧 vlcj 庫中使用。
  • Cyberduck 適用佇咧 FTP , SFTP , WebDAV , Cloud Files & Amazon S 三的瀏覽器。
  • Log 四 j , 附加紀錄檔庫。
  • Hudson 和 ・ Jenkins,繼續整合侍服器。
  • Webdriver。
  • YAJSW ( Yet Another Java Service Wrapper )。
  • Cassandra , 來自 Apache Software Foundation 的開源分布資料庫,使用 JNA。

另見

  • P / Invoke
  • SWIG

參考連結

外部連結

  • Java Native Access Web Page
  • Java Native Access-Download page
  • Java Native Access-User Mailing List
  • Java Native Access : An easier way to access native code by Jeff Friesen , JavaWorld . com , 二千空八孵二二孵五
  • Protect Your Legacy Code Investment with JNA by Stephen B . Morris , Java . net , 二千空九九五五鋪二十
  • Dasgupta , Sanjay . Simplify Native Code Access with JNA . Java . net . 二千空九九九九十一 [二千空二十五七孵二十三] .(原始內容存檔佇兩千空九石十一鋪十五).
  • JNA is now a Githubber by Daniel Doubrovkine , 二千空一十一孵九九二十
  • Calling the Lotus Domino C-API with JNA by Jesper Kiaer 二千空一十三抹二十一