1read 100read
2011年10月1期プログラム★お前らJavaはJNIで組もうぜ★
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
C++でXML(主にxerces)やろう! C言語の第一歩 米国国防省の標準高等言語エイダ(Ada)を語れ!
★お前らJavaはJNIで組もうぜ★
1 :02/10/05 〜 最終レス :11/12/25 このすれ立てても一人としてレスはいるとはおもっちゃ ねーけどさ 2ちゃんのアフォにはこのレス荒らすことぐらいしかできないと 思ってるぜ お前らに期待を裏切るような書き込みをリクエストする
2 : の仕切るスレなんか育てたくない。
3 : 育ててくれなくて結構よ
4 : Java Native Interface プログラミング ピアソン ちょっと誤植あるけどね JNIの資料ってあまりないからage
5 : まあポイントはJava側のクラスメンバと C/C++ネイティブで取り扱う引数とのせめぎあいかな
6 : SWTを参考にすべし
7 : 1に2ちゃんのアフォを黙らせるような書き込みをリクエストする
8 : C#並に簡単に書けるようになりませんか? はっきりいってウザイです
9 : >>8 お前みたいな能無しの書き込みをまってたんだよ どんどん書いてくれ 俺はヴァカだからC#しかできねぇってな
10 : C++からJVMコールしてますがなにか
11 : >>1 お前がなにかってみろ
12 : JavaからC/C++のバイナリをロードするにはJNIを知らないとできません C/C++技術者がJNIを知るとJVMの起動から呼び出しまで自由自在 2ちゃんの方々は言語をやっているだけでperlがうざいだのアセンブラがえらいだの 入り口の部分でのみ優劣を競っている低脳君がほとんどです 大切なのは言語でなにがどこまで深く実現できるかを知ることです
13 : >>12 > 大切なのは言語でなにがどこまで深く実現できるかを知ることです 「だったら、アセンブラがえらいよ。」と言う突込みしかこないぞ。 お前には、簡単にかつ安全に実現できる (=納期迅速、激安) と言う視点はないのか ?
14 : >>12 アセンブラじゃ速くてもコストがあわないぜ 速さとメンテナンス性のバランスを考えた上でのJNIなんだけどな アセンブラ偉いよ昔のCMOSさんみたいにVzエディタを全部アセンブラで くむぐらいならな 表面でアセンブラ云々抜かすなよ おまえもCMOSさんぐらいに組めるのなら尊敬するけどな
15 : >>14 > アセンブラじゃ速くてもコストがあわないぜ > 速さとメンテナンス性のバランスを考えた上でのJNIなんだけどな こいつなんか勘違いしてねーか ?
16 : 15のような言うだけでアセンブラもCもできない厨房は放置ということで そろそろJNIにいこうか
17 : 漏れはlong型のシグネチュアがLでは無い仕様に 結構驚いているけどね
18 : >>17 Lはクラスの完全修飾ってアレか
19 : >>16 > そろそろJNIにいこうか ププッ、みんなついてこなくって寂しいねぇ。 まあ、アセンブラと JNI を比較してぐだぐた言ってる厨房の相手はしてられねーよな。
20 : Windows + Java でクライアントアプリケーション開発してるけど、 JNI経由でWin32APIを適当に利用すると便利だね。 javaではスクリーンサイズしか取得できないけど、 JNI使えばタスクバーを除いたスクリーンのサイズを取得できるとか。 ファイルチューザーなんぞもWindowsの呼び出す方が楽だし。 みんなは、JNIでどんなことしてる?
21 : >>20 Javaはmainだけで、残り全部nativeにやらせてる。 Javaのすごさを証明するのに便利(w
22 : >>20 SystemParametersInfoのこと? おいらはSWTの OS#SystemParametersInfo(int uiAction, int uiParam, RECT pvParam, int fWinIni) で取得するけどね。
23 : おお! ちょいとこない隙に >>19 〜22 ようこそ! おいらもC/C++で作った過去の資産を JNIでがんがん使ってるよ なんたって Write ... なんたらは糞くらえ 速くて再利用可能なJNI最高だぜぃ
24 : JNIって本当にあるのでしょうか? 探しているのですが見つかりません。 もしかしてこれはネタスレでしょうか?
25 : javac -h でJNI用のヘッダが生成されるYO!
26 : >Windows + Java でクライアントアプリケーション開発してるけど、 >JNI経由でWin32APIを適当に利用すると便利だね。 うちの会社ではwindows上のクライアントアプリを作るために、 GUIとかAPIをJNIでラップしてるやつ買ったよ。 便利だね。 C#のライブラリーはなんであんなに糞なの?
27 : >>26 > GUIとかAPIをJNIでラップしてるやつ買ったよ。 Javaって write once run anywhere がウリなのにそんなことしたら 意味ネーじゃん。馬鹿?
28 : >>26 へぇ〜。何ていうやつ使ってるの?
29 : >Javaって write once run anywhere がウリなのに おいおい…。 いまや特定OSのAPIにも使われてるのに…。
30 : >>24 JNI最高よ 27みたいなプログラムにパフォーマンスを求めない人は縁はないけどね で顧客に「おたくの作ったの遅いから作り直せ」とか言われても 「Javaで組む仕様制限です」と逃げるわけね 今時Oracleでさえもネイティブに落としている現実を知らないのね なによりも今までのC/C++資産をすべて使えるこれ本当 おいおい話していきましょ
31 : >今時Oracleでさえもネイティブに落としている現実 既存部をJAVA向けにラップしてるんじゃなくて、 JAVA実装部をネイティブで書きなおしてるの?(厨でスマン
32 : 漏れはデプロイがめんどいEJBの代わりに JNI経由でCOM+を使うのが利口だと思うが如何か?
33 : >>32 COM+って何ができるのかいまいちわかってないモレに教えてクレ
34 : >>33 COMはコンポーネント技術の総称 MSの仕様策定品目 ようは部品だ、VB用のGUI部品からスタートしているが 分散COMとしてWebのバックグランドサービスや SQL DB操作用の javaBeanみたいな利用もできる EJBはOOだ偉いだろうと言うヤシがいるかもしれんが パフォーマンスはEJBの敵じゃないし STLで組めばCOMの内部はOOで実装可能 デプロイは簡単でGUIDと言う一意のクラスIDをレジストリに登録する COMは仕様であり、汎用機、UNIXでも動作する また、開発する言語はなんでもよい OLE, ActiveX, COM, COM+, DCOMなどMSが節操の無い名称を付けたため 基本仕様の素晴らしさをスポイルしている嫌いがある
35 : > COMは仕様であり、汎用機、UNIXでも動作する MSが仕様を公開しないから、 EJBやCORBAから接続できないって話を聞いたが? >基本仕様の素晴らしさ CORBAより、どの辺がすばらしいの? 煽りじゃなくて、普通に知らんのです.
36 : >>34 分散オブジェクトサービスみたいなんもんでしょーか。 あれ?そうするとDCOMとの違いが分からん...
37 : >>26 へー、売り物でそんなラッパーがあるですか? 良かったら製品名とか教えてもらえませんか? >>27 write once run anywhere なんて言ってる人がまだいたんだ… 今、javaに魅力を感じてる開発者って「どこでも動く」ということより 言語仕様、充実してきたクラスライブラリに惹かれてるのではないかと。
38 : >>37 ああ?Java厨召還するぞコラァ
39 : 良スレage >>27 SWTじゃなくて?
40 : って、ageてねーよ、俺(鬱
41 : JNI使うと遅くなるんだよ 知らないの?
42 : JNI通すところ自体はね。
43 : >>41 詳細キボンヌ
44 : >>43 これに載ってたよ。 http://www.amazon.co.jp/exec/obidos/ASIN/4894713934/ref=sr_aps_b_/250-0833969-8419468
45 : >>41 確かにね Cのコードをラップして利用するわけだから当然だよね 呼び出したあとのビジネスロジックなどがJVMの動作より トータルで速ければいいわけですよね あと、A/D変換のソフトウェアなんてJavaからコールして作成できるし アイデア次第でJavaの世界も広がるわけですよね
46 : >>37 >>言語仕様、充実してきたクラスライブラリに惹かれてるのではないかと。 そのとおりだよね 言語仕様は良い! しかし、かゆいところまでは手が届かない だからJNIなんだよね >>38 ここはJNIを応用して幅広い応用技術を含めた情報交換をする場所です Javaオンリーの狭い了見の人は連れてきても浮いてしまうよ どうせ実装が美しいとか、他の言語は糞だぐらいしか言えないんでしょうから どうせつれてくるのならC/C++でCORBAする人とか EJBのプロを連れてきてね あっきみに質問だけど JVMのローカルスタックのデフォルトサイズって知ってる?
47 : >>35 MSはCOM仕様は完全公開しているよ COMは独占物ではないよ CORBAとの比較は一言では語り尽くせないのだけど 昔CORBAの立ち上げ時にはAPIレベルでの仕様の統合が行われていないために 実装費用がかかりすぎたとの話があります COM仕様はその辺枯れている スレ違いかもしれんがJNIから利用する可能性が高い技術ということで ----------------------------------------------------------------------------------- サービス COM CORBA ----------------------------------------------------------------------------------- ライフサイクル IUnknown IF ライフサイクルサービス 恒常記憶域管理 パーシステントストレージ パーシステントサービス マーシャリング制御 IMarshal IF なし アウトバウンド制御 IConnectionPoint IF なし セキュリティ Identification Identification Authentication Authentication Integrity Integrity Confidentiality Confidentiality ServerActivation AccessControl AccessControl Delegation Delegation Nonrepudiation トランザクション管理 MS-TransactionServer ObjectTransactionServices (Viper) プロパティ管理 MS-ActiveDirectory PropertyServices
48 : > JVMのローカルスタックのデフォルトサイズ は、8Mでしょうか・・・
49 : スマンずれてしまた なにがなんだかわからん糞かいてもうた
50 : >>31 亀レスだが PL/SQLと同様な機械語コンパイル済みコードをサーバに持っているし オラクル独自実装のネイティブコンパイルを搭載している この事実は、オラクルもJVM(所詮インタプリタ)のパフォーマンスを問題視しているという事 の表れと思われる コマンドラインツール名は ncomp
51 : でも、COMをそういう使い方するのは終わりだってね。 .netとかsoapだって、これからは。 OSの中でまだ使われるかもしれないと。 JNIなんて特定のAPIが呼び出したい時くらいしか使わないなぁ。 そんな事もめったにないんだが。 人生に一度あるかないか・・・
52 : >>51 遊びでSOAPToolkitいじったら、 (SOAPの)アプリをCOMにしろとか言われたYO! まあ、SOAPToolkit自体がRemotingとかへの つなぎに過ぎなかったのかもしんないけど.
53 : >>51 このスレは使う必要がなくても無理して使いたい人が集うスレにしたかったのです 51もスキルがあるのだから無理して使ってくれる事をキボーン
54 : >53 正直JNIってあんまりいい印象無いのだけど。 以前COMで開発したアプリをJavaから使いたいって言われてJNIを調べてラップしてみようと したのだけど、結局COMのオブジェクトをJNIのコードで生存管理しなきゃならんかったような 気がしてベラボーに面倒くさくなってやめさせた。 ひょっとしてそれは俺が厨だからか?(笑 ところでrun anywhereってもう化石なの? ポータビリティとパフォーマンスはトレードオフで考えるのが普通な気がする。 世の中そんなにクリティカルな案件ばっかりなの?
55 : >>54 昔からマルチプラットフォームを謳うソリューションやツールは 必ずパフォーマンスが悪かった事を体験的に知っている俺はrun anywhereで売り出した時から Javaの事信じてなかったわけだす さらにservlet黎明期にJDBCを利用して開発したときに原因不明のトラブルとか多発して また嫌いになったわけだす(最近はずいぶん良くなりましたけど) そして顧客の要求はシビアでプラットフォーム依存な事をクリアしないと 要求が満たせないことがあってJNIだったわけです COMについては COMで実装しているコードをDLLバージョンに落とし込んで(単にコピペ) 利用するといういささかダサい方法もありますよね あ〜しかしこれだと工数削減にはならんか、またテストしなきゃならないもんなぁ JNIとC++の関係は確かに微妙な仕様制限があるようで 追って追跡していきましょう JNIのポータビリティってそんなに悪くないと思うけどね ようはプラットフォーム依存のところをうまく#ifdefしていけばよいし コールするFunction/Methodを切り替えられるよう作成すれば良いのだし まあこれらを実現するには 多数プラットフォームでコンパイルビルドできてプラットフォームについて 深く知っている必要があるのだけれども
56 : とりあえずJNIをすらすらとくのに必要な UNICODE->SJIS変換サンプル(Win32) 作者に感謝 http://www.ki.rim.or.jp/~kuro/Java/JNI/JNI-03.html
57 : age
58 : 一口ポイント サーブレット コンパイルして配置したJNI利用のサーブレットの場合 例:Apache+tomcatの場合 Servletコンテナサービスをリロードする必要がある tomの場合shutdown -> startup JVMがstaticロードしているからか
59 : 一口いんと C関数内でのJNI引数の利用方法 数値型はCの該当型にそのまま代入可能 String型だけやや操作する必要あり
60 : 開発環境作成例 JDK1.3とVC++6.0の例 フォルダを作成する jnihogeroot--------------------vcppprj---------relese + +----debug VC++のプロジェクトは vcppprjに作成する relese, debugはVC++が勝手に作成するフォルダ jnihogerootに置くファイル jnihoge.java ..... JNI原始ソース.java c.bat ...... コンパイルした後でVCプロジェクトにコピーするバッチ ↓ 内容 javac %1.java javah -jni %1 copy %1.h vcppprj 使い方 C:\vcpprj>c jnihoge [Enter] これでjavahで作成された.hをVC++プロジェクトにコピーしてくれる VC++のIDEにフォーカスを当てると 「外部のエディタで更新されました・・うんぬん」の表示がでるので OKを押して、.hの定義を.cppの適当なところにcopy 仮引数をてきとうにセットして関数の中身を書く VC++をビルドしていっちょうあがり 簡単楽しいJNI
61 : スマンまちがえ C:\vcpprj>c jnihoge [Enter] 訂正↓ C:\jnihogeroot>c jnihoge [Enter]
62 : 保守
63 : の仕切るスレなんか育てたくない。
64 : Java Native Interface?
65 : JNI呼び出しがあるとHotSpot最適化等が阻害されるのかなあ?
66 : >>65 もすこし詳しくお願い
67 : >>66 ごめん。言葉間違えてた、jit化だ。しのう。
68 : >>67 JITね IBM社のテクノロジっすね JITでネイティブ化されたオブジェクトって あなたの環境ではどこに置かれるの?
69 :
70 :
71 :
72 : hoshu
73 : JINIのスレはここですか?
74 : >>68 JIT って言えば首藤氏の shujit では?
75 : jfieldID fid = env->GetFieldID(cls, fname, "I"); でINT型のならフィールドIDをとれるんですが jfieldID fid = env->GetFieldID(cls, fname, "L"); オブジェクト型のがとれません。 どうすればよろしいか?
76 : JNDIって知ってる?
77 : >>76 http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jndi/ コレっすか? でもコレ JNI と関係ないよね。
78 : >>75 ドキュメントによると >L fully-qualified-class ; 完全指定のクラス だそうだ。
79 : 例えば "Ljava/lang/String;" とかやるみたい、たぶん。
80 : まず普通に一本Javaアプリこしらえて、それをその後、ガッツンガッツンのキッリキリに JNIに置き換えて...というか全て中身DLLに挿げ替えて、最終的に static void mainと、 そこから連なる一連のメソッドのインタフェースだけをJavaとして残す。 つーか、エントリ以外ほぼ全てnative宣言。 ....っていう強姦まがいのコードが書きたい。いや、むしろ一度書いてみたい。 write once , run here only.
81 : ちなみに、当然DLL内ではバージョンの限定されたMFCランタイムや、 何かをインストールしていないと絶対にインストールされないCOMを ギュゥオンギュゥオンに使用。 write once , run now.
82 : write once, debug anywhere
83 : >>80 >最終的に static void mainと …。 やりたきゃやれば? GC とか名前による動的バインディングとかの恩恵を 全部 omit するなら Java でやる必要ないし。
84 : >>83 御意!! まさにおっしゃる通りィッ!! というより、すでにJavaで無しッッッ!!
85 : >>80 それだったら C言語 のソースをJavaのバイトコードに落とせるコンパイラとか書いた方が面白そう。
86 : >>85 素晴らしいィィッ!! 隊長ッ!! 全ッ然意味の無いシロモノだが、イイッ! 自分、書いてみたいでありますッ! でも仕事量がマジ半端無ェ勢いに なりそうで、寝小便しそうでありますッ!
87 : ふつうにCやらC++で書いて、それを、main()だけをエクスポートするdllにして、 javaのmainからキックすればええやん。
88 : >>87 (゚听 )ツマンネ
89 : >>88 ← 彼は自分では無いでありますッッ!! でも、それではつまんないという事には禿げて同意でありますッッ!!
90 : >>87 っつーか Runtime.exec() で(以下略) 素直にネイティブアプリに(以下略)
91 : >>90 Runtime.exec()には胴衣ですが、 Javaアプリケーションのプラグインとしてネイティブアプリ ケーションをコールするっていうのは、あるのかもね。
92 : anywhereでrunしないけどね。
93 : そんなに、まともなソフトつくりたいんならさ、きっぱりJava捨てたら?
94 : >>93 Java捨てて 何使ったら良いでしょうか?
95 : >>92 JNIを使うという前提での話にそういう突っ込みしますか…
96 : >>95 JNI使う != run anywhere じゃないような。 Java の標準ライブラリだって JNI 使ってんだし。
97 : >>93 チャンポンしろ。 なんでもつかえ。 いいとこどり。
98 : >>94 C#使ったらどうだ? それでもしJavaと同じように糞だとわかったら、 その頃には次の言語が出てるから、新言語に乗り換えろ。
99 : >>98 それって延々と糞言語使い続けるって選択肢ですか?
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
C++でXML(主にxerces)やろう! C言語の第一歩 米国国防省の標準高等言語エイダ(Ada)を語れ!