2024年1月28日日曜日

今さらJava(Eclipse)(3)

久しぶりにJavaを触ってみようじゃないか。DLLを呼び出す。

Hello Worldでけたので、DLLをCALLしてみる。昔はこんなこと取り組んでなかったってのと、やっぱりJavaってちょいちょい仕様が変わるのかWebの賢者たちの記事があまり役にたたなくて苦労したぜー。

さて、JavaからNativeなDLLを呼び出すにはJNAってやつをつかうらしい。JNA=Java Native Access、、、英語圏の方々のこの省略やめてくれんかなーっていつも思う。いや、やってもいいけど、何を省略しているのかを毎回書けよって思う。初見殺しというか、一言さんお断りというか、高すぎて越えられない心の壁を感じる。そういう意味ではDLL=Dynamic Link Library。今まで書いたことなかったかもすまソ。
JNAはこちらからダウンロードできる。まぁまぁ下の方にあるこちら。

それはおいておいて、eclipseでprojectを作っていくぞい。

やり方はHelloWorldと同じ。project名をstudy103、メインのあるclass名をrijndael_callってする(まぁたAESかいってつっこまんでー)。
さて、ダウンロードした、JNAをどっか適当なところに持ってくる。うちではeclipseのworkspaceのそこに保存した。まぁどこでもいいんよ。
で、AESのDLLはworkspace下のdllってところに入れた。まぁどこでもいいんよ。
で、projectにJNAを入れ込む。projectのpropertyを押す。
で、"Java Build Path"ってのを選んで、"Libraries"タブを選んで、”Modulepath”を選んだ状態(Classpathを選んだ状態、、、って信じ切ってたんで、ここではまった)で、"Add External JARs..."を押す。
で、保存したjnaのjarを選ぶ。
こうなる。
で、ApplyやらApply and Closeやら押す。
module-info.javaに
requires com.sun.jna;
を追加する。
こんな感じ。
で、
rijndael_call.javaにコードを追加していく。
  1. package study103;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. public class rijndael_call {
  5.     static byte[] key={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
  6.     static byte[] plain={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77, (byte)0x88, (byte)0x99, (byte)0xaa, (byte)0xbb, (byte)0xcc, (byte)0xdd, (byte)0xee, (byte)0xff};
  7.     public interface RijndaelLib extends Library{
  8.         RijndaelLib INSTANCE= (RijndaelLib)Native.load("C:/Users/<username>/Documents/work/eclipse-java/study1/dll/rijndael_64.dll",RijndaelLib.class);
  9.         int AES128Encrypt(byte[] plain,byte[] key,byte[] akeome);
  10.     }
  11.     public static void main(String[] args) {
  12.         byte[] crypted=new byte[16];
  13.         RijndaelLib rijndaelLib=RijndaelLib.INSTANCE;
  14.         rijndaelLib.AES128Encrypt(plain, key, crypted);
  15.         for(int i=0;i<16;i++) {
  16.             System.out.print(String.format("%02X",crypted[i]));
  17.         }
  18.         System.out.println("");
  19.     }
  20. }
こうなる。
Javaってunsignedってのがないらしく、0x80以上の数字は明示的にキャストせんといかんとか、ナゾのお手当てをしている。
Native.loadLibraryってのがNative.loadに替わったらしい。
ってのもはまりポイント。
では実行してみる。
Project->Build Automaticallyにチェックが入っている状態で、再生ボタンを押す。
するってーと、
でけたー。
ちなみにrijndaelのソースコードはこちらに入れた。

いやーweb資料があまり役に立たなかったのでしんどかったです。プロフェッショナルなプログラマーは変更履歴から読み取るんだろうけど、webの実践記事だけを頼りにするとまぁまぁうまくいかんもんやね。そう考えると、AIなんて役に立たんやんとも思う。ちょっと前に取り組んで愕然としたので、今はAIに聞こうという気はさらさらないんやけどね。結局全部知ってないと、AIが作ったブラックボックスをどうしていいのかもわからんよね。妄想や幻想にかられて挑戦したものの挫折したときに、自力で這い上がる胆力が必要な時代や。

2024年1月19日金曜日

今さらJava(Eclipse)(2)

 

久しぶりにJavaを触ってみようじゃないか。Hello World。

Eclipseのインストールが終わったので、まずはHello Worldする。
で、プロジェクトを作る。
プロジェクト名を適当に入れる。
次の画面では何もすることはない(てことは前の画面でFinishでもよかった)。で、Finish。
なぞのアイコンをおして、プロジェクトツリーを表示させる。
プロジェクトを右クリックしてClassを追加。
こんな感じで入力する。で、Finish。
新しく作ったclassのコードを表示させて、
System.out.println("Hello world!");
を追加する。
で、Run。
そすと、
とりあえず、動いた。で、jarファイルを作る。
プロジェクトを右クリックしてExport。
Javaの中のRunnable JAR fileを選択してNext。
Launch Configurationは選択。Export Destinationはそれらしい感じにする。
で、Finish。では、できたjarを実行してみる。
プロジェクトを右クリックからのTerminalを表示。
jarのファイルがあるフォルダに移動して、実行。
うまくいった。
JavaはEclipseの貢献により開発環境整備は超簡単。が、いろいろ難しいことをやろうと思うとたしかかなり面倒だったような。まぁ昔とは違って、いろんな知恵がwebに存在するので、書籍だけが頼りだった頃よりはだいぶかわったんだろう。いい世の中になったよなー。モチベーションを忘れさせる様々な誘惑が多くなったので、それはそれで精神力が必要。

今さらJava(Eclipse)(1)

 

久しぶりにJavaを触ってみようじゃないか。Windowsで環境構築。

Javaといえば、もともとは小さいマイコン用に開発された言語。はじめて触れたのは、かれこれ、、、1996年だったから、、、29年前!!そのころインタラクティブなWebページを作成するのにJava Appletってのを使うってのが一部界隈で話題になってた。そして、今では当たり前になったブラウザでのゲームをそのころ作ってみたんだけど、もうソースコードもどこ逝ったかわからん。バイトの行き帰りに電車で本読みまくって勉強(?)したなー、、、てか、本来やるべき勉強そっちのけで。
で、実はLinuxでJavaを使ったGUIを作る、そして、なぜかやはりDLLをCallする(JavaからNativeライブラリをCallする変態)ってのをやってみようと思って準備してたんだけど、訳あってまずはWindowsでちょっと調べたいことがある。で、

まずは環境を整えようではないか。単にEclipseをインストールするだけらしい。ここhttps://www.eclipse.org/downloads/からダウンロードする。「Download x86_64」ってところをおせばいいんだろうけど、ナニモノがダウンロードされるのか疑り深い人は「Download Packages」リンクをつついて選んでダウンロードするってこともできる。
で、eclipse-inst-jre-win64.exeってのがダウンロードされた。たぶん後はこれを実行するだけ。
比較的長い時間のスプラッシュが表示された後こうなる。
で、Eclipse IDE for Java Developersを押すとこうなる。
で、INSTALLを押す。で、こうなる。
何書いているかわからんけど反射的に「Accept Now」を押す。
で、こんなのが出るかもしれない。
ざけんなって思いながら待つ。で、こうなる。
LAUNCHを押す。じゃまくさいスプラッシュが出る。
workspace(フォルダ)を選べよって言ってくるのでとりあえず、いつものstudy1。
で、まーたスプラッシュが出るので少しイラッとする。
で、こうなる。
とりあえず、インストールは終わり。
昔はeclipseはクソ遅くてできれば使いたくないツールNo.1だったけど、最近のはそんなに遅くないように感じる。PCの進化のおかげかもしれない。使いたくないとはいえ、FPGAにマイコンコアを組み込む場合のそのマイコン用のソフトの開発環境はeclipseベースのものが多い(Intel FPGAのNIOS II Software build toolsやLatticeのLattice Mico System)ので、実は今までも避けて通ることはできなかった訳でわある。
そういえば、1996年はeclipseのような環境はなかったけど、All Javaで書かれた、クラス階層の表示とかしてくれる、開発環境というほどのものではない、(実にほんの)ちょっと優秀なエディタ的な環境で開発してたんだけど、なんて名前のものだったか思い出せない( ´•ω•` )