{"id":1534,"date":"2012-08-25T11:57:31","date_gmt":"2012-08-25T09:57:31","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=1534"},"modified":"2012-08-25T11:57:31","modified_gmt":"2012-08-25T09:57:31","slug":"jna-java-native-access","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2012\/08\/jna-java-native-access\/","title":{"rendered":"JNA (Java Native Access)"},"content":{"rendered":"<p>Eine Bibliothek zum Ansprechen dynamischer Bibliotheken ohne JNA-Kontakt und damit ohne C(++)-Compiler ist JNA (Java Native Access). Beheimatet ist das Projekt unter <a href=\"https:\/\/github.com\/twall\/jna\/\">https:\/\/github.com\/twall\/jna\/<\/a>&#160; und es steht unter der Lizenzform LGPL. JNA ben\u00f6tigt nur das Archiv jna.jar im Klassenpfad und geht dann fast von selbst zur dynamischen Bibliotheken. Verschiedene Plattformen werden unterst\u00fctzt, dazu z\u00e4hlen Windows, Linux und Mac OS X.<\/p>\n<p>Zur dem Zugriff m\u00fcssen allerdings Java-Schnittstellen als typisierte Versionen der nativen Funktionen deklariert werden, damit auch die Datentypen von der Java-Seite automatisch auf Datentypen der nativen Seite gemappt werden k\u00f6nnen. Die Dokumentation unter <a href=\"https:\/\/github.com\/twall\/jna\/blob\/master\/www\/GettingStarted.md\">https:\/\/github.com\/twall\/jna\/blob\/master\/www\/GettingStarted.md<\/a>&#160; eigt ein Beispiel (hier etwas gek\u00fcrzt):<\/p>\n<pre class=\"csharpcode\">import com.sun.jna.*;\n\n<span class=\"kwrd\">public<\/span> <span class=\"kwrd\">class<\/span> HelloWorld {\n  <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">interface<\/span> CLibrary extends Library {\n    CLibrary INSTANCE = (CLibrary) Native.loadLibrary( Platform.isWindows() ? <span class=\"str\">&quot;msvcrt&quot;<\/span> : <span class=\"str\">&quot;c&quot;<\/span>,\n                                                       CLibrary.<span class=\"kwrd\">class<\/span> );\n    <span class=\"kwrd\">void<\/span> printf( String format, Object... args );\n  }\n\n  <span class=\"kwrd\">public<\/span> <span class=\"kwrd\">static<\/span> <span class=\"kwrd\">void<\/span> main( String[] args ) {\n    CLibrary.INSTANCE.printf( <span class=\"str\">&quot;Hello, World\\n&quot;<\/span> );\n    <span class=\"kwrd\">for<\/span> ( <span class=\"kwrd\">int<\/span> i = 0; i &lt; args.length; i++ )\n      CLibrary.INSTANCE.printf( <span class=\"str\">&quot;Argument %d: %s\\n&quot;<\/span>, i, args[ i ] );\n  }\n}<\/pre>\n<style type=\"text\/css\">\n.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<p>Die \u00dcbertragung der Funktionen von der C-Seite in Java-Schnittstellen \u2013 wie CLibrary in dem Beispiel \u2013 kann auch mit JNAerator (<a href=\"http:\/\/code.google.com\/p\/jnaerator\/\">http:\/\/code.google.com\/p\/jnaerator\/<\/a>) automatisiert werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Bibliothek zum Ansprechen dynamischer Bibliotheken ohne JNA-Kontakt und damit ohne C(++)-Compiler ist JNA (Java Native Access). Beheimatet ist das Projekt unter https:\/\/github.com\/twall\/jna\/&#160; und es steht unter der Lizenzform LGPL. JNA ben\u00f6tigt nur das Archiv jna.jar im Klassenpfad und geht dann fast von selbst zur dynamischen Bibliotheken. Verschiedene Plattformen werden unterst\u00fctzt, dazu z\u00e4hlen Windows, Linux [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-1534","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1534"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1534\/revisions"}],"predecessor-version":[{"id":1535,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1534\/revisions\/1535"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}