★お前らJavaはJNIで組もうぜ★at TECH
★お前らJavaはJNIで組もうぜ★ - 暇つぶし2ch2:デフォルトの名無しさん
02/10/05 14:34
チンカスの仕切るスレなんか育てたくない。

3:デフォルトの名無しさん
02/10/05 14:39
育ててくれなくて結構よ


4:デフォルトの名無しさん
02/10/05 14:40

Java Native Interface プログラミング
ピアソン
ちょっと誤植あるけどね
JNIの資料ってあまりないからage



5:デフォルトの名無しさん
02/10/05 14:43
まあポイントはJava側のクラスメンバと
C/C++ネイティブで取り扱う引数とのせめぎあいかな


6:デフォルトの名無しさん
02/10/05 18:21
SWTを参考にすべし

7:デフォルトの名無しさん
02/10/05 18:29
1に2ちゃんのアフォを黙らせるような書き込みをリクエストする

8:デフォルトの名無しさん
02/10/05 18:32
C#並に簡単に書けるようになりませんか?
はっきりいってウザイです

9:デフォルトの名無しさん
02/10/05 22:31
>>8
お前みたいな能無しの書き込みをまってたんだよ
どんどん書いてくれ
俺はヴァカだからC#しかできねぇってな


10:デフォルトの名無しさん
02/10/06 09:40
C++からJVMコールしてますがなにか

11:デフォルトの名無しさん
02/10/06 09:49
>>1
お前がなにか逝ってみろ


12:1ですが
02/10/06 10:15
JavaからC/C++のバイナリをロードするにはJNIを知らないとできません
C/C++技術者がJNIを知るとJVMの起動から呼び出しまで自由自在

2ちゃんの方々は言語をやっているだけでperlがうざいだのアセンブラがえらいだの
入り口の部分でのみ優劣を競っている低脳君がほとんどです
大切なのは言語でなにがどこまで深く実現できるかを知ることです

13:デフォルトの名無しさん
02/10/06 11:01
>>12
> 大切なのは言語でなにがどこまで深く実現できるかを知ることです

「だったら、アセンブラがえらいよ。」と言う突込みしかこないぞ。

お前には、簡単にかつ安全に実現できる (=納期迅速、激安) と言う視点はないのか ?

14:1ですが
02/10/06 20:21
>>12
アセンブラじゃ速くてもコストがあわないぜ
速さとメンテナンス性のバランスを考えた上でのJNIなんだけどな
アセンブラ偉いよ昔のCMOSさんみたいにVzエディタを全部アセンブラで
くむぐらいならな
表面でアセンブラ云々抜かすなよ
おまえもCMOSさんぐらいに組めるのなら尊敬するけどな


15:デフォルトの名無しさん
02/10/06 20:29
>>14
> アセンブラじゃ速くてもコストがあわないぜ
> 速さとメンテナンス性のバランスを考えた上でのJNIなんだけどな

こいつなんか勘違いしてねーか ?

16:デフォルトの名無しさん
02/10/06 21:48
15のような言うだけでアセンブラもCもできない厨房は放置ということで
そろそろJNIにいこうか

17:デフォルトの名無しさん
02/10/06 21:59
漏れはlong型のシグネチュアがLでは無い仕様に
結構驚いているけどね

18:デフォルトの名無しさん
02/10/06 23:43
>>17
Lはクラスの完全修飾ってアレか

19:15
02/10/07 22:27
>>16
> そろそろJNIにいこうか

ププッ、みんなついてこなくって寂しいねぇ。
まあ、アセンブラと JNI を比較してぐだぐた言ってる厨房の相手はしてられねーよな。

20:デフォルトの名無しさん
02/10/07 23:02
Windows + Java でクライアントアプリケーション開発してるけど、
JNI経由でWin32APIを適当に利用すると便利だね。
javaではスクリーンサイズしか取得できないけど、
JNI使えばタスクバーを除いたスクリーンのサイズを取得できるとか。
ファイルチューザーなんぞもWindowsの呼び出す方が楽だし。

みんなは、JNIでどんなことしてる?

21:デフォルトの名無しさん
02/10/08 08:15
>>20
Javaはmainだけで、残り全部nativeにやらせてる。
Javaのすごさを証明するのに便利(w

22:デフォルトの名無しさん
02/10/08 12:33
>>20
SystemParametersInfoのこと?
おいらはSWTの
OS#SystemParametersInfo(int uiAction, int uiParam, RECT pvParam, int fWinIni)
で取得するけどね。

23:chinkasu
02/10/08 22:06
おお!
ちょいとこない隙に
>>19~22
ようこそ!
おいらもC/C++で作った過去の資産を
JNIでがんがん使ってるよ
なんたって
Write ... なんたらは糞くらえ
速くて再利用可能なJNI最高だぜぃ


24:デフォルトの名無しさん
02/10/08 22:39
JNIって本当にあるのでしょうか?
探しているのですが見つかりません。
もしかしてこれはネタスレでしょうか?

25:デフォルトの名無しさん
02/10/08 23:19
javac -h でJNI用のヘッダが生成されるYO!

26:デフォルトの名無しさん
02/10/08 23:20
>Windows + Java でクライアントアプリケーション開発してるけど、
>JNI経由でWin32APIを適当に利用すると便利だね。
うちの会社ではwindows上のクライアントアプリを作るために、
GUIとかAPIをJNIでラップしてるやつ買ったよ。
便利だね。
C#のライブラリーはなんであんなに糞なの?

27:デフォルトの名無しさん
02/10/08 23:25
>>26
> GUIとかAPIをJNIでラップしてるやつ買ったよ。

Javaって write once run anywhere がウリなのにそんなことしたら
意味ネーじゃん。馬鹿?

28:デフォルトの名無しさん
02/10/08 23:58
>>26
へぇ~。何ていうやつ使ってるの?

29:デフォルトの名無しさん
02/10/09 00:03
>Javaって write once run anywhere がウリなのに

おいおい…。
いまや特定OSのAPIにも使われてるのに…。

30:デフォルトの名無しさん
02/10/09 00:27
>>24
JNI最高よ
27みたいなプログラムにパフォーマンスを求めない人は縁はないけどね
で顧客に「おたくの作ったの遅いから作り直せ」とか言われても
「Javaで組む仕様制限です」と逃げるわけね
今時Oracleでさえもネイティブに落としている現実を知らないのね
なによりも今までのC/C++資産をすべて使えるこれ本当
おいおい話していきましょ


31:デフォルトの名無しさん
02/10/09 00:34
>今時Oracleでさえもネイティブに落としている現実
既存部をJAVA向けにラップしてるんじゃなくて、
JAVA実装部をネイティブで書きなおしてるの?(厨でスマン

32:デフォルトの名無しさん
02/10/09 00:42
漏れはデプロイがめんどいEJBの代わりに
JNI経由でCOM+を使うのが利口だと思うが如何か?

33:デフォルトの名無しさん
02/10/09 00:44
>>32
COM+って何ができるのかいまいちわかってないモレに教えてクレ

34:デフォルトの名無しさん
02/10/09 00:55
>>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:デフォルトの名無しさん
02/10/09 01:00
> COMは仕様であり、汎用機、UNIXでも動作する
MSが仕様を公開しないから、
EJBやCORBAから接続できないって話を聞いたが?

>基本仕様の素晴らしさ
CORBAより、どの辺がすばらしいの?
煽りじゃなくて、普通に知らんのです.

36:デフォルトの名無しさん
02/10/09 01:01
>>34
分散オブジェクトサービスみたいなんもんでしょーか。
あれ?そうするとDCOMとの違いが分からん...

37:20
02/10/09 01:02
>>26
へー、売り物でそんなラッパーがあるですか?
良かったら製品名とか教えてもらえませんか?

>>27
write once run anywhere なんて言ってる人がまだいたんだ…
今、javaに魅力を感じてる開発者って「どこでも動く」ということより
言語仕様、充実してきたクラスライブラリに惹かれてるのではないかと。

38:デフォルトの名無しさん
02/10/09 01:03
>>37
ああ?Java厨召還するぞコラァ

39:デフォルトの名無しさん
02/10/09 01:08
良スレage

>>27
SWTじゃなくて?

40:デフォルトの名無しさん
02/10/09 01:09
って、ageてねーよ、俺(鬱

41:デフォルトの名無しさん
02/10/09 01:11
JNI使うと遅くなるんだよ
知らないの?

42:デフォルトの名無しさん
02/10/09 01:19
JNI通すところ自体はね。


43:デフォルトの名無しさん
02/10/09 01:23
>>41
詳細キボンヌ

44:デフォルトの名無しさん
02/10/09 01:30
>>43

これに載ってたよ。
URLリンク(www.amazon.co.jp)


45:デフォルトの名無しさん
02/10/09 08:35
>>41
確かにね
Cのコードをラップして利用するわけだから当然だよね
呼び出したあとのビジネスロジックなどがJVMの動作より
トータルで速ければいいわけですよね
あと、A/D変換のソフトウェアなんてJavaからコールして作成できるし
アイデア次第でJavaの世界も広がるわけですよね


46:デフォルトの名無しさん
02/10/09 08:48
>>37
>>言語仕様、充実してきたクラスライブラリに惹かれてるのではないかと。
そのとおりだよね
言語仕様は良い!
しかし、かゆいところまでは手が届かない
だからJNIなんだよね

>>38
ここはJNIを応用して幅広い応用技術を含めた情報交換をする場所です
Javaオンリーの狭い了見の人は連れてきても浮いてしまうよ
どうせ実装が美しいとか、他の言語は糞だぐらいしか言えないんでしょうから
どうせつれてくるのならC/C++でCORBAする人とか
EJBのプロを連れてきてね
あっきみに質問だけど
JVMのローカルスタックのデフォルトサイズって知ってる?







47:デフォルトの名無しさん
02/10/09 09:09
>>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:38
02/10/09 09:10
> JVMのローカルスタックのデフォルトサイズ

は、8Mでしょうか・・・

49:デフォルトの名無しさん
02/10/09 09:10
スマンずれてしまた
なにがなんだかわからん糞かいてもうた

50:デフォルトの名無しさん
02/10/09 11:10
>>31
亀レスだが
PL/SQLと同様な機械語コンパイル済みコードをサーバに持っているし
オラクル独自実装のネイティブコンパイルを搭載している
この事実は、オラクルもJVM(所詮インタプリタ)のパフォーマンスを問題視しているという事
の表れと思われる

コマンドラインツール名は ncomp



51:デフォルトの名無しさん
02/10/09 12:37
でも、COMをそういう使い方するのは終わりだってね。
.netとかsoapだって、これからは。
OSの中でまだ使われるかもしれないと。

JNIなんて特定のAPIが呼び出したい時くらいしか使わないなぁ。
そんな事もめったにないんだが。
人生に一度あるかないか・・・

52:デフォルトの名無しさん
02/10/10 00:34
>>51
遊びでSOAPToolkitいじったら、
(SOAPの)アプリをCOMにしろとか言われたYO!

まあ、SOAPToolkit自体がRemotingとかへの
つなぎに過ぎなかったのかもしんないけど.

53:デフォルトの名無しさん
02/10/10 08:37
>>51
このスレは使う必要がなくても無理して使いたい人が集うスレにしたかったのです
51もスキルがあるのだから無理して使ってくれる事をキボーン



54:デフォルトの名無しさん
02/10/11 01:51
>53
正直JNIってあんまりいい印象無いのだけど。
以前COMで開発したアプリをJavaから使いたいって言われてJNIを調べてラップしてみようと
したのだけど、結局COMのオブジェクトをJNIのコードで生存管理しなきゃならんかったような
気がしてベラボーに面倒くさくなってやめさせた。
ひょっとしてそれは俺が厨だからか?(笑

ところでrun anywhereってもう化石なの?
ポータビリティとパフォーマンスはトレードオフで考えるのが普通な気がする。
世の中そんなにクリティカルな案件ばっかりなの?


55:デフォルトの名無しさん
02/10/11 18:20
>>54
昔からマルチプラットフォームを謳うソリューションやツールは
必ずパフォーマンスが悪かった事を体験的に知っている俺はrun anywhereで売り出した時から
Javaの事信じてなかったわけだす
さらにservlet黎明期にJDBCを利用して開発したときに原因不明のトラブルとか多発して
また嫌いになったわけだす(最近はずいぶん良くなりましたけど)
そして顧客の要求はシビアでプラットフォーム依存な事をクリアしないと
要求が満たせないことがあってJNIだったわけです

COMについては
COMで実装しているコードをDLLバージョンに落とし込んで(単にコピペ)
利用するといういささかダサい方法もありますよね
 あ~しかしこれだと工数削減にはならんか、またテストしなきゃならないもんなぁ
JNIとC++の関係は確かに微妙な仕様制限があるようで
追って追跡していきましょう

JNIのポータビリティってそんなに悪くないと思うけどね
ようはプラットフォーム依存のところをうまく#ifdefしていけばよいし
コールするFunction/Methodを切り替えられるよう作成すれば良いのだし
まあこれらを実現するには
多数プラットフォームでコンパイルビルドできてプラットフォームについて
深く知っている必要があるのだけれども




56:デフォルトの名無しさん
02/10/11 18:50

とりあえずJNIをすらすらと逝くのに必要な
UNICODE->SJIS変換サンプル(Win32)
作者に感謝
URLリンク(www.ki.rim.or.jp)


57:デフォルトの名無しさん
02/10/31 01:55
age

58:デフォルトの名無しさん
02/11/05 16:46
一口ポイント

サーブレット

コンパイルして配置したJNI利用のサーブレットの場合

例:Apache+tomcatの場合
Servletコンテナサービスをリロードする必要がある
tomの場合shutdown -> startup

JVMがstaticロードしているからか


59:デフォルトの名無しさん
02/11/05 22:16
一口ちんぽいんと

C関数内でのJNI引数の利用方法
数値型はCの該当型にそのまま代入可能
String型だけやや操作する必要あり






60:デフォルトの名無しさん
02/11/05 22:29
開発環境作成例
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:デフォルトの名無しさん
02/11/05 22:31
スマンまちがえ
C:\vcpprj>c jnihoge [Enter]
  訂正↓
C:\jnihogeroot>c jnihoge [Enter]



62:デフォルトの名無しさん
02/11/12 19:04
保守

63:デフォルトの名無しさん
02/11/15 00:44
チンカスの仕切るスレなんか育てたくない。

64:C++使い
02/11/15 11:57
Java Native Interface?

65:デフォルトの名無しさん
02/11/22 23:22
JNI呼び出しがあるとHotSpot最適化等が阻害されるのかなあ?

66:デフォルトの名無しさん
02/11/24 11:46
>>65
もすこし詳しくお願い


67:デフォルトの名無しさん
02/11/24 12:38
>>66
ごめん。言葉間違えてた、jit化だ。しのう。

68:デフォルトの名無しさん
02/11/24 21:41
>>67
JITね IBM社のテクノロジっすね
JITでネイティブ化されたオブジェクトって
あなたの環境ではどこに置かれるの?


69:デフォルトの名無しさん
02/12/08 02:36


70:デフォルトの名無しさん
02/12/08 02:36


71:デフォルトの名無しさん
02/12/08 02:36


72:デフォルトの名無しさん
02/12/11 23:56
hoshu

73:デフォルトの名無しさん
02/12/12 02:42
JINIのスレはここですか?

74:デフォルトの名無しさん
02/12/12 05:16
>>68
JIT って言えば首藤氏の shujit では?

75:デフォルトの名無しさん
02/12/26 22:22
jfieldID fid = env->GetFieldID(cls, fname, "I");
でINT型のならフィールドIDをとれるんですが
jfieldID fid = env->GetFieldID(cls, fname, "L");
オブジェクト型のがとれません。
どうすればよろしいか?



76:デフォルトの名無しさん
02/12/26 22:32
JNDIって知ってる?

77:デフォルトの名無しさん
02/12/26 22:35
>>76
URLリンク(java.sun.com)
コレっすか? でもコレ JNI と関係ないよね。

78:デフォルトの名無しさん
02/12/26 22:45
>>75
ドキュメントによると

>L fully-qualified-class ; 完全指定のクラス

だそうだ。

79:デフォルトの名無しさん
02/12/26 23:01
例えば "Ljava/lang/String;" とかやるみたい、たぶん。

80:Java軍曹
02/12/27 04:18
まず普通に一本Javaアプリこしらえて、それをその後、ガッツンガッツンのキッリキリに
JNIに置き換えて...というか全て中身DLLに挿げ替えて、最終的に static void mainと、
そこから連なる一連のメソッドのインタフェースだけをJavaとして残す。
つーか、エントリ以外ほぼ全てnative宣言。
....っていう強姦まがいのコードが書きたい。いや、むしろ一度書いてみたい。

write once , run here only.

81:Java軍曹
02/12/27 04:23
ちなみに、当然DLL内ではバージョンの限定されたMFCランタイムや、
何かをインストールしていないと絶対にインストールされないCOMを
ギュゥオンギュゥオンに使用。

write once , run now.

82:デフォルトの名無しさん
02/12/27 04:25
write once, debug anywhere

83:デフォルトの名無しさん
02/12/27 04:54
>>80
>最終的に static void mainと
…。
やりたきゃやれば?
GC とか名前による動的バインディングとかの恩恵を
全部 omit するなら Java でやる必要ないし。

84:Java軍曹
02/12/27 05:12
>>83
御意!! まさにおっしゃる通りィッ!!
というより、すでにJavaで無しッッッ!!

85:デフォルトの名無しさん
02/12/27 05:17
>>80
それだったら C言語 のソースをJavaのバイトコードに落とせるコンパイラとか書いた方が面白そう。

86:Java軍曹
02/12/27 05:23
>>85
素晴らしいィィッ!! 隊長ッ!!
全ッ然意味の無いシロモノだが、イイッ!

自分、書いてみたいでありますッ! でも仕事量がマジ半端無ェ勢いに
なりそうで、寝小便しそうでありますッ!

87:デフォルトの名無しさん
02/12/27 06:59
ふつうにCやらC++で書いて、それを、main()だけをエクスポートするdllにして、
javaのmainからキックすればええやん。

88:Java軍曹
02/12/27 08:20
>>87
(゚⊿゚ )ツマンネ

89:Java軍曹
02/12/28 01:07
>>88 ← 彼は自分では無いでありますッッ!!
でも、それではつまんないという事には禿げて同意でありますッッ!!


90:デフォルトの名無しさん
02/12/28 01:08
>>87
っつーか Runtime.exec() で(以下略)
素直にネイティブアプリに(以下略)

91:デフォルトの名無しさん
02/12/28 01:13
>>90
Runtime.exec()には胴衣ですが、
Javaアプリケーションのプラグインとしてネイティブアプリ
ケーションをコールするっていうのは、あるのかもね。

92:デフォルトの名無しさん
02/12/28 01:15
anywhereでrunしないけどね。

93:デフォルトの名無しさん
02/12/28 01:16
そんなに、まともなソフトつくりたいんならさ、きっぱりJava捨てたら?

94:デフォルトの名無しさん
02/12/28 01:17
>>93
Java捨てて 何使ったら良いでしょうか?

95:デフォルトの名無しさん
02/12/28 01:20
>>92
JNIを使うという前提での話にそういう突っ込みしますか…

96:デフォルトの名無しさん
02/12/28 01:27
>>95
JNI使う != run anywhere じゃないような。
Java の標準ライブラリだって JNI 使ってんだし。

97:デフォルトの名無しさん
02/12/28 01:28
>>93
チャンポンしろ。
なんでもつかえ。
いいとこどり。


98:デフォルトの名無しさん
02/12/28 01:28
>>94
C#使ったらどうだ?
それでもしJavaと同じように糞だとわかったら、
その頃には次の言語が出てるから、新言語に乗り換えろ。

99:デフォルトの名無しさん
02/12/28 01:29
>>98
それって延々と糞言語使い続けるって選択肢ですか?

100:デフォルトの名無しさん
02/12/28 01:31
>>96
どんなボケですか?
ユーザが勝手に作るJNI!=Run Anywhereは常に成立デスヨ。

101:デフォルトの名無しさん
02/12/28 01:31
>>85
CをJavaに変換するなんてとても容易にできることだとは思えないぞ。
ポインタ、アドレス操作も大変だし、
メモリリーク、配列のバッファーオーバーフロー起こすことができるCソースをそのまま
Javaに変換しても動かないし。

Cの構造体をJavaに変換するとフィールドがすべてpublic、だが値型。
構造体への構造体も値型であるから、
それをクラスの中にあるクラス(クラスの集約)として変換しても
どう考えたってそのまんまではエラー。
Javaではクラス(オブジェクト)はすべて参照型と決まっているからね。
変換したいCソースにC++コードいれたらとんでもないことになりそうだね。

ほかにも容易でない理由はまだまだあるんだけど、きりがないからこれくらいにしておこう。

CをJavaに自動変換するなんて現状ではまだ現実的とは思えないな。
JavaをCに変換するのは簡単だけどその逆は容易でない、というか、
不可逆反応です。それだけJavaが整然としたすっきりとした言語ってことだね。

JavaをC#に変換するJUMP to .NET ですら変換がうまくいかないことがあり、
RMI使っているJavaソースや一部のJava独自のライブラリをC#に変換できないというし。

ある程度は自分で書き直した方が早いんじゃないかな。

102:デフォルトの名無しさん
02/12/28 01:33
>>101
逆は作ってるヒトたまにいるね。

103:デフォルトの名無しさん
02/12/28 01:34
>>101
前橋和哉さんがそういうコンパイラ作る話題をWebに書いてなかったけ?

104:デフォルトの名無しさん
02/12/28 01:39
>>101
C言語ソース -> Javaソース じゃなくて
C言語ソース -> Javaバイトコード だったら出来るんじゃない?

それに C言語ソース -> Javaソース だったら
可変長引数の処理とかも無理っぽいし。

105:デフォルトの名無しさん
02/12/28 01:50
Cをアセンブリやマシン語には出来ても
アセンブリやマシン語をCには出来んでしょ。
Java厨にはそんなこともわからんの?

106:デフォルトの名無しさん
02/12/28 01:53
>>105
つまり、君には理解できなかったと。

107:デフォルトの名無しさん
02/12/28 02:11
>>106 わけわからん

108:デフォルトの名無しさん
02/12/28 02:22
>>105
CをJavaにするコンバータを作るのは無理だけど
JavaでCをエミュレートするのは無理じゃないって事では?

109:デフォルトの名無しさん
02/12/28 04:48
Windowsでレジストリにアクセスしたいときに使ってた。
まあ、せいぜいインストールパスを見るぐらいだけど。
後、イベントログの出力に log4j を使ったんだが、内部
ではJNI経由でDLL呼び出ししてたな。小技的に使うのが
いい感じ。


110:デフォルトの名無しさん
02/12/28 05:16
>>104
可変長引数なら、
可変長引数をあらわすこんなクラスをつくればいいんじゃないか?
import java.util.Vector;

public class VariableLengthArgument {
private int number;
private Vector vector;
public VariableLengthArgument(){
number = 0;;
}

public void add(Object obj){
vector.add(obj);
number++;
}

public Object get(int index){
return vector.elementAt(index);
}

public int getNumber(){
return number;
}
}

111:デフォルトの名無しさん
02/12/28 05:42
>>110
それだったら素直に Vector 使った方が早い。

112:デフォルトの名無しさん
02/12/28 06:03
>>110
Vector#add(Object) 使ってるかと思えば、
Vector#elementAt(int) 使ってる。統一性無いよ。

JDK1.1 との互換性気にするなら
Vector#addElement(Object)
Vector#elementAt(int)

JDK1.1 以前お断りなら
Vector#add(Object)
Vector#get(int)

あと、number 意味なしじゃない?
vector.size() 使えばよさげだし。
つーか、 >>111 の言うとおり クラス作るだけ無駄っぽい。

113:デフォルトの名無しさん
02/12/28 06:28
>>110
おまけに vector が null のまんまだから
add か get で NullPointerException 食らうし。

114:Java軍曹
02/12/28 11:30
>>110
>可変長引数をあらわすこんなクラスをつくればいいんじゃないか?

そのクラスをその様にどうしても作りたいなら、むしろ extends Vector !!
ていうか、implements Collection した別ものを用意!!
ただしその場合、内部実装は >>111氏の言うように Vectorとまったく同じッッ!!

というか自分ならむしろ、privateメンバとしてVectorを持たず、普通の配列を
持つであります!そして、java.lang.reflect.Array で newInstanceして
まるでconcatするような処理をワザワザ実装するであります!!

さらにこの場合、内部的にはただの配列なので、
ついでに、 java.util.Comparator を implementsした別クラスを用意し、
何か用がある場合、
java.util.Arrays.binarySearch(..)(スタメソ)の引数として使い、
そのComparator を継いだクラスの中で、渡された「配列の要素」をグリングリンに
いじりまわす処理を書きたいと思いますッッ!!!
(要するにComparatorであって、Comparatorで無し!!実装の上げ足取り!)

要するに”binarySearch”という響きにゾッコン☆LOVEであります!!


115:Java軍曹
02/12/28 11:42
>>114 に追記であります!!
ちなみにこの実装は、「こうしたらちょっとは早くなるかも」という
自分の妄想の産物であります!!

Vectorに格納された何らかのオブジェクト、(特に VOID* のつもりの引数)
に対処する時や、union な structのメンバに対処する時に、いちいち Vectorからgetして
getClass() して判定するのがなんとなく遅そうだと思ったのであります!!

故にッッ!!! 突っ込み所満載かもしれないでありますッッ!!!!

116:デフォルトの名無しさん
02/12/28 17:30
>>111-113
コンストラクタで new Vectorしていなかった。
確かにnumberいらないか。

Vectorそのまま使ってもいいけど、
そこに入るのは可変長引数のみであることを意識するために
別にクラス用意した方がいいかなと思った。

あと、 >>114-115 の言うとおり、引数無しvoidにも対応させるための手段も
必要かなと。
 add()メソッドが動くまでget()するとデフォルトでvoid状態
 remove()メソッドで全部消してget()するとvoid状態を返す
な感じに。

URLリンク(www.gimlay.org)
を見るとやっぱりクラス作った方がいいかなと。
引数のサイズの上限は255, long, doubleが入った場合は2個分として計算。
これらの振り分け処理をaddメソッドに追加した方がいいかな。

JDK1.1以前お断りでadd,get限定にしますか。
(.Net厨やJ++/J#厨からするとお断りにするなと言いそう)


117:デフォルトの名無しさん
02/12/28 17:37
public class Point3d {
    public double x;
    public double y;
    public double z;

    ...

    public void add(Point3d p) {
        this.x += p.x;
        this.y += p.y;
        this.z += p.z;
    }

    ...
}

このaddメソッド程度のものをnativeで書いた場合とどちらが速いんですかね?
そういったことを試したサイトありませんか?

118:デフォルトの名無しさん
02/12/28 18:17
昔のJavaコンパイラはCへのコンバータだったんだよね

119:デフォルトの名無しさん
02/12/29 12:50
>>117 そこまでコーディングしたなら自分で試せばいいだろ

120:Java軍曹
02/12/29 19:25
>>117
>このaddメソッド程度のものをnativeで書いた場合とどちらが速いんですかね?

この「nativeで書いた場合」とは、このスレの主旨から考えるに、当然
「このメソッドについて」、「JNIを使用する」事を想像しているものと思われるが、
その場合、処理速度の早い遅いを決めるポイントは、主に以下の2点になると思われますッッ!!

1)どれだけこのメソッドの中で完結している処理の量がある(多い)か
2)このnative宣言されたメソッドの実体(DLL)が、どれだけJavaのオブジェクトを利用するか

1について、それが「いやーこれがもう本当にループ部分とか壮絶なネストでぐーるぐるなんですよ」
だった場合、早くなるかもしれないと思われます!そして、こことも関わる話でありますが、
2について、「いやー中の処理は殆ど別のオブジェクト(Javaのクラスのインスタンス)のメソッド呼びまくりなんですよ」
だと、かえって遅くなるか、あるいはあんまり変わらない可能性が高いと思われます!!

なぜなら!DLL側で受け取るJavaのクラスのインスタンスは、プリミティブ型(この場合はラッパー)も含めて、
全ていちいちFindClassして探し出さなければならないからであります!

参考↓
URLリンク(java.sun.com)

121:Java軍曹
02/12/29 19:26
簡単に言ってしまえば、「COMを使うっぽい感じ」でありますッッ!!

122:デフォルトの名無しさん
02/12/30 03:34
>>120
それだと今回の add を JNI 化しても遅くなる可能性のが高そうだね。

123:Java軍曹
02/12/30 17:41
>>122
御意ッ!

124:デフォルトの名無しさん
02/12/31 16:47
>>122
むしろほぼ確実。
最近は、バイトコード実行速度の上昇がめざましいため
JNI呼び出しにかかるオーバヘッドの方が大きくなることが多い
よほど大きなタスクでない限りJavaで完結したほうが速いと思われる。
このスレの趣旨と真っ向から対立する話だけどな。

125:Java軍曹
02/12/31 17:25
>>124
正にッッ!!

JNIを「速度を求めて」あるいは「Javaで利用できない機能」を実現する手段として正しく実装したいと思うなら、
変な言い方かもしれませんが、自分が思うに、
「そのJavaアプリケーションのアドイン的な立場として」実装するのが吉ではないかと思われますッッ!!

つまり、「このnativeなヤツは、最初の引数受け取り以降、あるいは最後の戻り値以前の部分が、結構重い
(あるいはプラットフォーム固有の処理ばっかな)んスよ。」で、かつ
「いや、これはここで完結してるんで、JVMに迷惑かけないスよ」である場合に、
初めてその効能が得られるのではないか、と。

そうで無い場合、124氏の言われるように、Javaで完結するのが、本来は吉であると
思われますッッ!!

126:C++厨
02/12/31 19:26
nativeインターフェスは速いの~?(´∀`)

127:117
02/12/31 20:03
public void add(Point3d p),public native void add(Point3d p)
の2つで実際にやってみたよ.
方法はこのaddメソッドを100M回呼び,その時間を計測するというもの.
その結果,前者が40msec, nativeの方が大体4000msec.
予想通り呼び出しなんかのオーバーヘッドが大きかったということでしょうか.
ということでもう一つ.今度は↓のようなもの.
public void exe() {
    double x = this.x;
    double y = this.y;
    double z = this.z;
    for (int i = 0; i < 0xfffffff; i++) {
        x += 1.0;
        y += 1.0;
        z += 1.0;
    }
    this.x = x;
    this.y = y;
    this.z = z;
}
単純に0xfffffff回,+1.0するだけのものだけど,
これもまたnativeと2つ作成して,今度は一回だけ呼んで時間を計測したもの.
その結果,普通の場合がおよそ5000msec,nativeは4000msec
あんまり変わらなかったですね.

JDK1.4/WinXP/1GHz/C++コンパイラは.NETのもの(よく分からない)

JNIで処理の速さを求めるのは間違いかもしれません.
よほど負荷のかかる処理でもない限り,JNIは使うべきではないと思いました.
Javaでは実現出来ないところをCなりで実装するためにあるのかも知れません.

ちなみに使用したnativeコードは次の書き込み.

128:117
02/12/31 20:10
JNIEXPORT void JNICALL Java_Point3d_add(JNIEnv* env, jobject me, jobject p){
jclass cls = env->GetObjectClass(me);
jfieldID fid_x = env->GetFieldID(cls, "x", "D");
jfieldID fid_y = env->GetFieldID(cls, "y", "D");
jfieldID fid_z = env->GetFieldID(cls, "z", "D");
jdouble this_x = env->GetDoubleField(me, fid_x);
jdouble this_y = env->GetDoubleField(me, fid_y);
jdouble this_z = env->GetDoubleField(me, fid_z);
jdouble p_x = env->GetDoubleField(p, fid_x);
jdouble p_y = env->GetDoubleField(p, fid_y);
jdouble p_z = env->GetDoubleField(p, fid_z);
env->SetDoubleField(me, fid_x, this_x+p_x);
env->SetDoubleField(me, fid_y, this_y+p_y);
env->SetDoubleField(me, fid_z, this_z+p_z);
}

JNIEXPORT void JNICALL Java_Point3d_exe(JNIEnv* env, jobject me){
jclass cls = env->GetObjectClass(me);
jfieldID fid_x = env->GetFieldID(cls, "x", "D");jfieldID fid_y = env->GetFieldID(cls, "y", "D");jfieldID fid_z = env->GetFieldID(cls, "z", "D");
jdouble x = env->GetDoubleField(me, fid_x);jdouble y = env->GetDoubleField(me, fid_y);jdouble z = env->GetDoubleField(me, fid_z);
for (int i = 0; i < 0xfffffff; i++) {
    x += 1.0;
    y += 1.0;
    z += 1.0;
}
env->SetDoubleField(me, fid_x, (jdouble) x);
env->SetDoubleField(me, fid_y, (jdouble) y);
env->SetDoubleField(me, fid_z, (jdouble) z);
}

this.x += p.x;を実装するたけでも↑のようなコードが必要っぽい.
なんか他にいい方法ないですかね?

129:117
02/12/31 20:12
>>127の書き込み訂正
× 100M回
○ 1M回

130:デフォルトの名無しさん
02/12/31 20:20
>>127-129
レポートご苦労様っす。

131:デフォルトの名無しさん
03/01/02 14:46
>>128
GetObjectClassとGetMethodIDは一回でいいはず
なんどもやるのは無駄

132:デフォルトの名無しさん
03/01/04 10:28
GetFieldID を init に追い出してチェックしてみたら
100M回の比較で
Point3D.add::4536ms
Point3D.addNative::128084ms
Point3D.addNativeWithGetFieldID::459834ms

ちなみに C++ で Point3D を作ってやってみたら
Point3D->add::2684ms

おまけに Point2D も作ってみたけど
Point2D.add::2814ms
Point2D.addNative::86375ms
Point2D.addNativeWithGetFieldID::415858ms
Point2D->add::2614ms

133:デフォルトの名無しさん
03/01/04 11:00
GetObjectClass/GetFieldIDは案の定重いね
どちらが重かったか分かる?

134:デフォルトの名無しさん
03/01/04 11:03
やってて気づいたんだけど jdk1.4って浮動小数点演算の最適化が甘くなってるかも?
>>132 は jdk1.4.1

jdk1.3.1
Point2D.add::3205ms
Point2D.addNative::87405ms
Point3D.add::3545ms
Point3D.addNative::125200ms

jdk1.2.2
Point2D.add::2964ms
Point2D.addNative::52155ms
Point3D.add::2714ms
Point3D.addNative::73957ms

135:デフォルトの名無しさん
03/01/04 11:23
>>133
ほい。回数は先のと同じく100M回。

invokeJNIMethod::4096ms
getObjectClass::12328ms
getFieldID::74877ms

136:デフォルトの名無しさん
03/01/04 11:28
>>135
グッジョブ!
100M回って、100 * 1000 * 1000 回であってるよね?

137:デフォルトの名無しさん
03/01/04 11:35
>>136
>100M回って、100 * 1000 * 1000 回であってるよね?
そのとーりです。

138:デフォルトの名無しさん
03/01/04 15:11
>>134
浮動小数点演算じゃなくて inline 展開の仕方が悪い(?)のかも
p1.add(p2);
p2.add(p1);

p1.x += p2.x; p1.y += p2.y; p1.z += p2.z;
p2.x += p1.x; p2.y += p1.y; p2.z += p1.z;
で測定したら
Point3D.add::4557ms
自力計算::2694ms
みたいに差が出ました。(jdk1.4.1の場合)
jdkのバージョンによっては あんまし差が無かったりする
(jdk1.2.2だと測定誤差程度だけど自力計算のが遅かったりする)
ので面白いなぁ、と思ってみたり。

特にヘンなのが IBM のjdk1.3.0で
class Point3D extends Point2D にして
public void add( Point3D p ){
 super.add(p);
 this.z += p.z;
}
とかゆーふーにした場合が一番速かったり。

これ以上はHotSpotやらJITやらの知識が無いと測定しても意味無いかも…

139:デフォルトの名無しさん
03/01/04 15:21
ううむ、JIT様がガリガリ最適化したら、
どう書いても同じになりそうな気がするんだが
そうでもないのか。

140:IP記録実験
03/01/08 22:23
IP記録実験
スレリンク(accuse板)

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。

141:デフォルトの名無しさん
03/01/09 00:42
>>69
アクセスログじゃなくって書き込み単位で記録しているだけだろ
そんな一気にはふえねーだろ

142:デフォルトの名無しさん
03/01/09 01:02
ひろゆきの悲しいときを教えれ。

143:デフォルトの名無しさん
03/01/09 01:21
>>422
別に気にはならないですね。


144:デフォルトの名無しさん
03/01/09 01:33
どうですか。( ´Д⊂

145:デフォルトの名無しさん
03/01/09 02:09
「2chでは裏でIP記録されています。IPを抜かれたくなければ
セキュリティガードに…」

というコピペを流行らせる会 会長↓

146:デフォルトの名無しさん
03/01/09 03:00
さて。2ちゃんの流浪の民を吸収できる掲示板システムを作ることが出来得るなら
これは非常に大きなビジネスチャンスだと思うのだが。
誰かやれ!

147:デフォルトの名無しさん
03/01/09 03:47
>>197

 いや、ま、正論ではあるのだけどな。。



148:デフォルトの名無しさん
03/01/09 18:35
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

149:デフォルトの名無しさん
03/01/10 00:20
>>493
いくらなんでも、無差別にIP公開はしないと思うが。

150:デフォルトの名無しさん
03/01/10 09:08
>>573
世の中サヨとネットと圧力で出来てると思っているお前のような奴のほうが
世の中にとっては役に立たない

151:デフォルトの名無しさん
03/01/10 10:28
>>196
いや、そんなことはないですよ。

152:デフォルトの名無しさん
03/01/10 11:05
西村氏は
廃人で雪に入って凍っているかと思ったらまだ生きていたんですね。

153:デフォルトの名無しさん
03/01/10 11:36
ちなみに、「国民クイズ」内では日本国憲法が改正され、こんな条文が追加されてる。
日本国憲法第12章104条「国民クイズは国権の最高機関であり、その決定は
国権の最高意思最高法規として、行政、立法、司法、その他あらゆるものに絶対、
無制限に優先する」

笑えるところなのかわからんが34話にはムネオたんか?と思われる方もカメオしてる。

154:デフォルトの名無しさん
03/01/10 11:57
Java Native Interface?

155:デフォルトの名無しさん
03/01/10 12:24
>>481
名誉毀損で逮捕かよ!

でも管理人、笑えないんじゃない?コレ。


156:デフォルトの名無しさん
03/01/10 12:41
>>434
現実のものとなりました。

157:デフォルトの名無しさん
03/01/10 12:51
>>942
一応ありがと。そのリンク先の1の判決文末尾の「別紙発言目録」ってのが
見たいわけなんだけど、そのスレのどっかにリンク張られてるのかな?


158:デフォルトの名無しさん
03/01/10 15:01
・圧縮やなんかでdat落ちした分を省いた
・報告無しで処理された分を省いた
・まとめが好きで好きでたまらないまとめ大好きっ子だった

159:デフォルトの名無しさん
03/01/10 16:30
あーの事ね。



大阪キタ━━━┌(_Д_┌ )┐━━━ !!!!!

160:デフォルトの名無しさん
03/01/10 22:52
お近くの警察署か裁判所へどうぞ>329さん


161:デフォルトの名無しさん
03/01/10 22:59
ニュー速以外はだいたい串通るから
IP記録は無駄無駄。。。

162:デフォルトの名無しさん
03/01/11 00:15
末期症状だな。削除問題をIP記録にすりかえてる。北朝鮮並みの姑息な対応。

163:デフォルトの名無しさん
03/01/11 00:23
ぼうやだからさ

164:デフォルトの名無しさん
03/01/11 09:48
釣りじゃないのなら実に現実味のない意見だ

165:デフォルトの名無しさん
03/01/11 09:51
まあよしゆきも控訴審の判決が出たからにはポーズだけでもとらにゃいかんだろう。
よほど悪質な犯罪予告等を除いてはよしゆきの判断次第。面倒くさくなったら、
当事者同士で問題解決してよん。んじゃ!って感じだろう。

166:デフォルトの名無しさん
03/01/11 10:22
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────

167:デフォルトの名無しさん
03/01/11 11:16
大作死ね!とか欠いたら危険になるのかな?

168:デフォルトの名無しさん
03/01/11 11:47
会同


※この書き込みはフィクションです。
 実際の団体・人物・民族等とは一切関係ありません。

169:デフォルトの名無しさん
03/01/11 12:49

このスレのIPとって訴訟するのだけは止めてくれよ。クチビルゲ。
スレリンク(kao板)







うわっ何かクラックされて勝手に文章が・・・あ、さらにポインタが書き込みボタンに・・・あわわわ!!

170:デフォルトの名無しさん
03/01/11 13:18
俺もそう思う。高い金自腹で払って掲示板を運営してて
何処の誰かも知らん奴が勝手なこと書いた事によって
自分に火の粉が飛んで来たら、秘密を守ってやる義理は
ないよなひろゆきにしたら。

171:デフォルトの名無しさん
03/01/11 16:05
まぁなんだ

「ひろゆきよ ラウンジが重いんだが・・・と電話しまくって即閉鎖」

が一番早そうだな(藁

172:デフォルトの名無しさん
03/01/11 16:11
復活してちょっとうれしい今日の漏れ

173:デフォルトの名無しさん
03/01/12 00:12
>>IP記録

告発ネタが減少するのは残念。

・WTCテロのリーク
・西部の松坂の駐車違反
・牛肉買い上げの告発

等々、
いろいろとおいしいネタがあったのになあ。
おまえらの知ってる2ちゃん内の告発ネタを教えてください。

174:デフォルトの名無しさん
03/01/12 00:22
良識ある書き込みをしろ

175:デフォルトの名無しさん
03/01/12 03:00
はピン子のAAだったのか(w

176:デフォルトの名無しさん
03/01/12 03:03
国税庁のHP

177:デフォルトの名無しさん
03/01/12 10:32
マスコミって単純だね。
ほんと馬鹿だよな。

178:デフォルトの名無しさん
03/01/12 10:36
正当性を高める必要は全くないな… 知ったかぶりしていた&判決すらちゃんと読んでないな僕は。
まさか弁護士がついてるのに「本件にはプロバイダー責任法が適用され,同法の制定経緯,規制範囲等に照らすと,被告が本件各発言を削除しなかったことにつき削除義務違反はない」と主張するなんて常識的に考えられなかったので…
寝ぼけてたのかな?恥ずかしい(^^; ゴメンナサイ> 231&253

179:デフォルトの名無しさん
03/01/12 21:12
   /⌒ヽ 
  /  ´_ゝ`)   IP子です。よろしこ
  |    /   
  | /| |   
  // | |  
 U  .U


180:デフォルトの名無しさん
03/01/12 21:14
>626
・・・
デンパでしゅか?

181:デフォルトの名無しさん
03/01/12 21:27
いえいえ、誘導どうもありがとうございます。


182:デフォルトの名無しさん
03/01/13 15:44
>>139
JIT様の最適化にも癖があるよーで…

183:山崎渉
03/01/13 18:54
(^^)

184:山崎渉
03/01/15 18:08
(^^)

185:デフォルトの名無しさん
03/01/18 00:09
>>182
いわゆるJITってクラス境界を越えたinline化はしないのかな?
そうでもしないと限界がすぐに見えちゃう気がするけど。

最近JNIをやってるのですが、JNI Callしたあとって必ず
Exceptionのチェックをしないとダメなんですかね?
かなりウザいんですが・・・

下がりすぎてるようなのでage

186:デフォルトの名無しさん
03/01/18 05:08
eclipseでJNIを使ったプロジェクトを開発中ですが、LoadLibrary()で止まってしまいます。
dllはどこに置けばいいのでしょうか。

eclipseスレで聞いたほうがよかったのかな。

187:デフォルトの名無しさん
03/01/18 10:02
確かPATHの通ってるところ

188:デフォルトの名無しさん
03/01/18 10:03
>>185
> Exceptionのチェック
んなわけない

189:デフォルトの名無しさん
03/01/18 10:15
>>186
Windows が使用する DLL 検索パス
URLリンク(www.microsoft.com)

他にもレジストリとか見てたよーな気がするんだけど気のせいかも…

190:デフォルトの名無しさん
03/01/18 11:34
>>188
そうなの?FindClassとかGetMethodIDとかは戻り値が0だったら
エラーが起こってるのは判るけど、
CallObjectMethodとかだと戻り値だけじゃわかんないやん。

で、一度exceptionが起こると、続くJNI呼び出しはおかしくなるようです。
つかjava.exeが固まります(jdk1.4.1)。というわけで

env->CallIntMethod();
check();
env->CallObjectMthod();
check();
...

なんていうコードを書くハメになったりするわけですが、激しくダサい。

191:デフォルトの名無しさん
03/01/18 22:10
>>190
URLリンク(www.ki.rim.or.jp)
なんかが参考になるかもね

192:デフォルトの名無しさん
03/01/18 22:21
>>190
呼び出しが例外を起こす可能性があるなら、
必ずチェックしなければならない。

188は嘘。騙された190はご愁傷さま。

193:186
03/01/18 23:50
もいっちょお願いします。
.dllをJARに入れて配布するには、どうMANIFESTファイルを設定すればいいでしょうか。

194:デフォルトの名無しさん
03/01/19 18:20
>>193
>.dllをJARに入れて配布するには
無理じゃない?

195:188,191
03/01/19 22:17
>>192
必死だと思われようがあえて書く。
185は "JNI Callしたあとって必ず" とあるから
"んなわけない" と書いたんですが。
例外を投げる可能性がある場合に
チェックしないといけないのは当たり前。

196:デフォルトの名無しさん
03/01/19 22:20
voidさんいらっしゃい。

197:山崎渉
03/01/23 20:11
(^^)

198:むー
03/01/24 04:05
>>190
Javaメソッド呼んだ後にExceptionOccurredでチェックして例外発生して
たらC++例外投げるようなJNIEnvのラッパーみたいなの書いて、
nativeメソッド全体をtry-catchで囲んどいてラッパーから投げたC++例外
をキャッチしてJava側にさっくり戻る、みたいなことやったりしたらだめかね?


199:デフォルトの名無しさん
03/01/24 23:46
>>198
結局そうなりますた。
が、windowsでは動きましたがlinuxではJVMがクラッシュしますた。
例外が原因らしいことまでは分かったのですが・・・

200:デフォルトの名無しさん
03/01/25 09:26
>>199
そんなに甘くないのか… なんでだろう?
Linux版のJVMではJava例外の実装にC++の例外機構の何かを使って
バッティングしちゃった、とかそんな理由なんかな。
stack-unwindでJVMのスタックかどっかを破壊しちゃうとか。
core見ないとわかんなそうだけど、JVMのcore読みなんて鬱すぎる…

201:デフォルトの名無しさん
03/01/26 06:15
>>199
try catch なんてハイカラなもの使わずに goto するしか!

202:デフォルトの名無しさん
03/01/26 09:25
>>201
c++のデストラクタを活用してるコードがあるのよ・・・

203:デフォルトの名無しさん
03/01/26 09:37
>>200
こんなのありますた
URLリンク(mail.gnu.org)

ショボーン
URLリンク(mail.gnu.org)

ショボーン
URLリンク(wmf.editthispage.com)

204:デフォルトの名無しさん
03/01/31 00:01
>>203
赤帽7.2とgcc2.96で、JDK1.4.1な環境だが、試したら大丈夫だたよー

205:デフォルトの名無しさん
03/02/01 13:27
>>204
マジですか?
つかgcc2.96ってどういうバージョンなんでしょう
本家には置いてないし・・・

206:204
03/02/02 07:38
>>205
GNUでは2.96は開発版で配布に適さないといってるみたい。
URLリンク(gcc.gnu.org)
でも、RedHat社のサイトにはRPMがまだあるみたいだね。
2.95や3.xと互換性はないらしいが。。。
2.95.2とか、3.2とかじゃうまくいかないのかな。
204の環境は借り物だったんで、他はわからんですわい。スマソ

207:デフォルトの名無しさん
03/02/20 17:08
JNI通すところ自体はね。

208:デフォルトの名無しさん
03/02/20 17:14
なんでわざわざC++でつくられたバイナリをJAVAから使う必要があるのだ?
perlにしといたら?

209:デフォルトの名無しさん
03/02/20 17:22
>>208
なんでわざわざC++でつくられたバイナリをperlから使う必要があるのだ?

210:デフォルトの名無しさん
03/02/20 17:40
>>208
Javaでコーディングする部分のOSへの依存を下げるため

211:デフォルトの名無しさん
03/02/20 17:58
この間初めて JNI 使って Windows の CPU 使用率をとってみた。
結構簡単だった。

212:デフォルトの名無しさん
03/02/20 19:46
>>211
SNMP使えば、Windows でも Linux でも同じコードで CPU使用率とれるのに。。

213:デフォルトの名無しさん
03/03/07 21:59

URLリンク(page5.auctions.yahoo.co.jp)

ヤフオク出品したよ
1円スタートでマジお勧め!

「10日でおぼえるJSP/サーブレット入門教室」翔泳社



214:デフォルトの名無しさん
03/03/07 22:05
あげ荒らし氏ね

215:電波さん
03/03/16 03:16
現在VMに興味があって最近勉強しだしたところ。
このスレ結構面白いです。

JNIなんて「共有オブジェクト読んで関数呼べば良いんだろ」程度に思ってたけど
結構やること多いのね。nativeコードからのJavaVMの呼び出しなんて念頭になくって
これから調べないといけないです。
勉強になります。

216:デフォルトの名無しさん
03/03/22 08:12
勃起age

217:デフォルトの名無しさん
03/03/22 12:57
いろいろ書籍やWEBサイトを参考にしてるんだが
どうやってもCからJVMをロードできない。
何か根本的に間違えてるのだろうか。

218:デフォルトの名無しさん
03/03/22 17:08
>なんでわざわざC++でつくられたバイナリをJAVAから使う必要があるのだ?

あなたTYPE2のJDBCドライバを使ったこと、ありませんか?

219:デフォルトの名無しさん
03/03/23 02:58
Pure じゃなくても、少しくらい汚れてしまった Java の方が萌える

>>212
SNMP って ICMP じゃなかったっけ?

220:デフォルトの名無しさん
03/03/23 08:51
>>219
> SNMP って ICMP じゃなかったっけ?

ハァ ? プロトコルの勉強しなおした方がいいんじゃない ?
URLリンク(www.arkweb.co.jp)

221:山崎渉
03/04/17 15:51
(^^)

222:デフォルトの名無しさん
03/04/19 13:47
結論:全部C++で。これ最強。

223:山崎渉
03/04/20 03:39
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

224:デフォルトの名無しさん
03/04/27 13:02
JavaでHello World JNI編
URLリンク(www.hellohiro.com)

225:山崎渉
03/05/28 13:13
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎―◎                      山崎渉

226:デフォルトの名無しさん
03/06/11 05:51
swig使ってJNI部分を自動生成してみたんだけど結構便利そう
URLリンク(swig-jp.dyndns.org)

227:デフォルトの名無しさん
03/06/15 00:11
いえいえ、誘導どうもありがとうございます。

228:デフォルトの名無しさん
03/06/15 00:43
   /⌒ヽ 
  /  ´_ゝ`)   IP子です。よろしこ
  |    /   
  | /| |   
  // | |  
 U  .U

↑ゲーム製作技術板のなんとか君みたい!
ここのマスコットキャラにしよう

229:山崎 渉
03/07/15 10:51

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

230:山崎 渉
03/07/15 14:02

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

231:山崎 渉
03/08/02 02:52
(^^)

232:デフォルトの名無しさん
03/08/15 05:24
こんにちは,教えてください。
趣味でUSBデバイスを作ろうとしているのですが,
汎用USBドライバがUUSBD.DLLというものを
通して利用できることがわかりました。

JNIを使えばJAVAからDLLを使うことができるのでしょうか?
JNIの使い方を調べたら,
1.JAVAでソースを書く。
2.コンパイルする。
3.ヘッダファイルを作る。
4.インクルードしてC等でDLLを作成する。
になっていました。

しかし,この場合だと,UUSBD.DLLを
自分で作り変えることになってしまうと考えるのですが,
拾ってきたDLLをそのまま使うことはできますか?

233:デフォルトの名無しさん
03/08/15 06:06
やったことないけど。

Cで作成したDLLからそのUUSBD.DLLをいじればいいのでは?


234:デフォルトの名無しさん
03/08/15 14:26
>>232
UUSBD.DLLを使用するプログラムを
JNIにすればいいだけではないのか?
間にかませるって言うことだ

235:山崎 渉
03/08/15 15:10
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

236:デフォルトの名無しさん
03/08/16 09:32
からあげうまうま

237:デフォルトの名無しさん
03/08/17 19:13
俺、cの知識がないからよくわかんないんだよね。
どうやったらいいの?
やっぱcの勉強しないと駄目ですか?
駄目ですよね・・・。

238:デフォルトの名無しさん
03/08/17 19:16
>>237
お前はアセンブリで充分だ。
そんな高級な言語使うな

239:デフォルトの名無しさん
03/08/17 23:15
JNI本買わないとやっぱ駄目なのかな。
Webで検索したけどほとんど情報無いよ。

240:デフォルトの名無しさん
03/08/18 00:29
このスレ頭から30過ぎくらいまで読んだんだけどさ。









Java次世代コボル決定!
ごめんね10年後のプログラマ達

っていうサブタイトルつけていいですか?

241:デフォルトの名無しさん
03/08/18 00:42
>>240
さびれたスレに即レスするのもなんだが、アオるにしても、下手な文章だな。

JNIは、jdk1.5を目前としているいまでは、ほとんど使う必要がないだろう。
GUI周りで、どうしても、使いたいネイティブのAPIがあるときだろうが。
SWTに関していうと、あれはかなり微妙だな。サンがクライアントサイドを本気で取り組めば、存在は消えていく。
逆に、アポーだと、IBMに完全にイニシアチブをとられる流れで、クライアントサイドはSWT一色になる可能性も、
すくないが秘めている。



242:デフォルトの名無しさん
03/08/18 01:29
>>241
Javaアプリから、WinのネイティブAPIを叩かなければならないような
仕組みを作る羽目になったときは、つかうど。

「誰だ、この仕組み考えた奴は!」と設計者を呪いながら(ワラ

243:240
03/08/18 02:11
>>241
別に煽っても釣ってもないです。
JNIの存在意義と正しい使い方がわかってないのに
JNIとか叫んでる人達(>>1-30くらいで痛いほど見れます)が大杉。

必要性云々ではなくて機種依存性を正しく局所に押さえ込めてますか?
もっというとネイティブAPIをちゃんとラップして使ってますか?
っていうレベルで。>>1-30を見ると正直怪しい。
SWTとかどうでもいいよ。
コンポーネントとして成立してればその部分を移植できれば他でも動くんだからさ。



244:デフォルトの名無しさん
03/08/18 07:49
> JNIは、jdk1.5を目前としているいまでは、ほとんど使う必要がないだろう

何か素晴らしい仕組みが1.5には入るの?

245:デフォルトの名無しさん
03/08/18 14:07
swigならJNIで使うヘッダや関数を定義したファイルを作れば
自動的に定義された関数にアクセスするC言語のJNIソースと
Javaソースを自動生成してくれるのに
Java使いは誰も知らなさそうなのが残念

246:デフォルトの名無しさん
03/08/18 17:09
俺はSWINGというより、レジストリアクセスやウィンドウキャプチャとか
アーカイバDLLで圧縮処理とかそう言うレベルの仕事がしたかったんだけど。
Javaで。
無理かな?

247:デフォルトの名無しさん
03/08/18 18:00
>>246
swig
URLリンク(swig-jp.dyndns.org)

swing
URLリンク(java.sun.com)

248:デフォルトの名無しさん
03/08/18 20:08
Tigar (Java2 SE 1.5) のJava 言語仕様の拡張
URLリンク(www.mtl.t.u-tokyo.ac.jp)

genericsとautoboxingはうれしいな。for はなんかスクリプトっぽくて気持ち悪い。
aspectjは入らんのな。プロパティの設定は面倒くさいまんまか。

249:デフォルトの名無しさん
03/08/18 20:48
>>248
隼(1.4)から虎(1.5)へ~JDK1.5について!
スレリンク(tech板)l50

【猿が】JavaニGenericsハ不要 【ソース汚す】
スレリンク(tech板)l50

あたりでやってくれ。

250:246
03/08/19 13:07
>>247
ちょっと逝ってくる。





ただいま。

251:デフォルトの名無しさん
03/08/19 15:23
おかえり

252:デフォルトの名無しさん
03/08/20 16:16
age

253:デフォルトの名無しさん
03/09/18 02:15
sage

254:デフォルトの名無しさん
03/09/25 20:58
それでもおまいらはJNIをおいそれと使いますか?

255:デフォルトの名無しさん
03/09/25 22:59
java から c を呼び出すのでなく
c から java を呼び出すのに最近はまってる。

ライブラリが充実してて非常によい。
普通に c/c++ のライブラリ使えという話もあるが。

256:デフォルトの名無しさん
03/09/28 06:32
>>255
むしろ普通にJavaを使え。
JNIでスタートアップルーチンだけ用意して。

257:デフォルトの名無しさん
03/09/28 08:12
>>1
レスを荒らす方法を教えてください。。。

258:デフォルトの名無しさん
03/10/01 05:33
C言語からJavaを呼び出すのってバージョン依存激しそうに見えるんだけどそうでもない?

259:デフォルトの名無しさん
03/10/01 23:33
>>258
Java のバージョンとは別に JNI にもバージョンがあって
JNI 1.1 と 1.2 ではだいぶ書き方が違うけど
Java 1.2 から 1.4 まで全部 JNI 1.2 だったと思うから
バージョン依存の問題はあんまりたいしたことない。

260:デフォルトの名無しさん
03/10/13 17:03
JAVAでCDプレーヤーを作るコツを教えて下さい。難しいでしょうか?

261:デフォルトの名無しさん
03/10/14 23:07
gcj + swtでwindows用の
アプリケーションを作ろうと思っています。
waveやmidiを鳴らしたいのですが、
gcjでは実装されていません。
jniを用いたクラスライブラリは存在しないでしょうか?
よろしくお願いします。

262:デフォルトの名無しさん
03/10/15 00:00
win32apiのJNI用ラッパか・・・
MSが自社用JavaVM専用に作ろうとしてSunとケンカして以来、
大きなものは誰も作ってないと思う

263:261
03/10/17 21:03
>262
レスありがとうございます。
自分の必要な分はwin32APIを
勉強して、なんとかできました。

264:デフォルトの名無しさん
03/10/26 21:47
swigつかって自分でSDLのラッパー作ってみればどうよ

265:デフォルトの名無しさん
03/10/27 23:53
javahでヘッダが出来るじゃないですか。んで
java_パッケージ名_クラス名_関数名(ネイティブメソッド)
ってなりますけど、既存の関数呼ぶにはやっぱりこの長い名前の関数から
呼ぶしかないですかね。教えてください。

266:デフォルトの名無しさん
03/10/28 00:45
>>265
swig使ったら自動的に生成してくれますよ

267:265
03/10/28 22:54
自動で生成って。。。
既存の関数名では出来ないですかね?
調べてみます。

268:デフォルトの名無しさん
03/10/31 13:49
できないからswig使えってことじゃないの?

269:デフォルトの名無しさん
03/11/06 14:32
JAVAでC呼び出すなら最初からCで記述すればよくないですか?
何かメリットでもあるんでしょうか?

270:デフォルトの名無しさん
03/11/06 14:36
>>269
最終的に機械語にするんなら、なんで最初から機械語で書かないで C言語を使うのか?
ってのと同レベルの疑問だね。

271:デフォルトの名無しさん
03/11/06 14:36
JavaでCを使うのは既存のC言語ライブラリが長年使われているもので
実績があるもので、それを何とか再利用したいときなどにメリットがある。

けれどもJNIはJavaにとって苦肉の策。

基本はJavaで、というのが美しい。

272:デフォルトの名無しさん
03/11/06 15:12
>>271
おまえ、プログラマ?
デベロッパ用のソフトなんてJNIが絡んでるの多いぞ
そういうの作らないとわかんないとは思うけど

273:デフォルトの名無しさん
03/11/06 15:31
BASICから機械語呼び出すのとおんなじ
あああ懐かしい

274:デフォルトの名無しさん
03/11/07 11:34
JAVAからCを呼び出してPRINTFを使って文字を出力する単純な処理ができません。
ライブラリを作ってパスを通してもライブラリが見つからないというようなメッセージが出てしまいます。
どのようにすればいいのでしょうか?

275:デフォルトの名無しさん
03/11/07 11:38
>247
随分難易度の高いことしてんなー
わかったら本でも書け


276:デフォルトの名無しさん
03/11/07 22:13
CにSTRINGの文字列を引数として読み込む時に何で構造体を使わなくてはいけないのですか?

277:デフォルトの名無しさん
03/11/07 22:23
>>276
STRING って何? STRING は (String(Java) == jstring(JNI)) と同等?

jstring だと構造体っても struct _jobject; (もしくは class _jobject{};)だし…

278:デフォルトの名無しさん
03/11/08 00:37
Cで作成した関数をjavaから呼び出したい場合、
JNIEXPORT~の形にすると思うんですが、
プロトタイプ宣言の部分はJNIには不要ですよね?
消してしまって問題ないですか?

279:デフォルトの名無しさん
03/11/08 01:42
>>278
構造体の話は何処行ったんだ?

> 消してしまって問題ないですか?
それは javah が自動生成したコードを削って良いかって話ですか?

javah が生成したファイルの先頭に
> /* DO NOT EDIT THIS FILE - it is machine generated */
って書いてあると思うんだが…

280:デフォルトの名無しさん
03/11/08 01:44
       , --- 、_
      /ミミミヾヾヽ、_
   ∠ヾヾヾヾヾヾjj┴彡ニヽ
  / , -ー‐'"´´´    ヾ.三ヽ
  ,' /            ヾ三ヽ
  j |             / }ミ i
  | |              / /ミ  !
  } | r、          l ゙iミ __」   
  |]ムヽ、_    __∠二、__,ィ|/ ィ }
  |    ̄`ミl==r'´     / |lぅ lj  >>1 諦めろ
  「!ヽ、_____j ヽ、_  -'  レ'r'/
   `!     j  ヽ        j_ノ
   ',    ヽァ_ '┘     ,i
    ヽ  ___'...__   i   ハ__
     ヽ ゙二二 `  ,' // 八
      ヽ        /'´   / ヽ
      |ヽ、__, '´ /   /   \

281:278
03/11/08 09:23
C単体で動くプログラムはできていて、そのプログラム内で使われている関数をJAVAから呼び出したいと思っています。
C単体で実行はしないのでCのソースのプロトタイプ宣言の部分は削っても問題ないですか?
という質問です。

282:デフォルトの名無しさん
03/11/08 13:58
>>281
> C単体で実行はしないのでCのソースのプロトタイプ宣言の部分は削っても問題ないですか?
オマエの手元にしかないソースに判断求められてもねぇ…

基本的に削ると何かメリットがあるのか良く考えてみた方が良いような。

283:デフォルトの名無しさん
03/11/08 14:49
>>281
構造体の話はどこいったんだ?

284:デフォルトの名無しさん
03/11/08 18:36
Cで適当に作った関数はプロトタイプ宣言をしなくてもJNIで呼び出せたので、別にプロトタイプ宣言なんてしなくてもいいじゃんと思いこんでいるのですが、そんな問題では無いのでしょうか?

285:デフォルトの名無しさん
03/11/08 19:42
おまいらのやっている事VBと同じやん。

286:デフォルトの名無しさん
03/11/08 20:09
>>284
構造体の話はどこいったんだ?

> Cで適当に作った関数はプロトタイプ宣言をしなくてもJNIで呼び出せたので、別にプロトタイプ宣言なんてしなくてもいいじゃんと思いこんでいるのですが、そんな問題では無いのでしょうか?

とりあえず、JNI に関する質問ではないので C の初心者スレにでも言って聞け。

287:デフォルトの名無しさん
03/11/08 22:48
JNIを扱うには、CとJavaとOSに精通してないと厳しいぞ。

288:デフォルトの名無しさん
03/11/08 23:21
>>287
おまいの言っている事VBと同じやん。

289:デフォルトの名無しさん
03/11/08 23:27
>>287
CとJavaとOS について初心者よりマシっつー程度の知識があれば JNI 使えます。

290:デフォルトの名無しさん
03/11/09 12:59
でもJNIの初心者向けのサイト行っても引数としてオブジェクト使ったり構造体のポインタをオブジェクトに対して使ったり、もう暗号みたいになっててよくわからんですよ。
優しく解説されている本とかあるんでしょうかね?

291:デフォルトの名無しさん
03/11/09 13:41
>>290
> でもJNIの初心者向けのサイト行っても引数としてオブジェクト使ったり構造体のポインタをオブジェクトに対して使ったり、もう暗号みたいになっててよくわからんですよ。
それは精進が足りん、ってだけの話では?

とりあえず、キミが JNI は良くわからない、と思っている事だけはわかった。
何がわからないのかはサッパリわからない。

292:デフォルトの名無しさん
03/11/09 17:59
JNIとは関係なくプロトタイプ宣言はしておいたほうがいいよ。
コンパイラが型チェックしてくれてコーディングミスを指摘してくれる。

293:デフォルトの名無しさん
03/11/09 23:01
SwigつかってJavaからSDLを使うラッパー作ったけど公開してほしい人っている?

294:デフォルトの名無しさん
03/11/10 10:02
>>293
公開したいんだろ? 公開したらいいじゃん。
まったく、いやらしい言い方する奴だな。

295:デフォルトの名無しさん
03/11/11 03:45
>>294
うぅ・・・気をつけます、どうやら誰も要らないみたいなんでひっそり封印します

296:デフォルトの名無しさん
03/11/14 13:59
日本語の文字列の受け渡しがさっぱり分からないのですがサンプルに書いてある通りに書いてみて、
こういうもんだと割り切って詳しく理解する必要はありませんか?

297:デフォルトの名無しさん
03/11/14 15:43
>>293
誰かが JSDL ってのを公開してたような…

298:デフォルトの名無しさん
03/11/14 15:46
>>296
> こういうもんだと割り切って詳しく理解する必要はありませんか?
その程度の情報で同意を求められても…

文字列は UTF 使うってのを忘れてる、とかじゃなくて?

299:デフォルトの名無しさん
03/11/19 14:39
Cで作った文字配列をJAVAに返すやり方がいまいちわかりません。
簡単な方法はありませんか?

300:デフォルトの名無しさん
03/11/19 15:47
>>299
C の char配列を Java の byte配列に変換して渡してやるか、(渡された先で String に変換する)
JNI 経由で java.lang.String のコンストラクタ String(byte[] bytes,String encoding) を呼び出せ。

301:デフォルトの名無しさん
03/11/19 16:29
C側のネイティブ関数の戻り値はJSTRINGじゃないですよね?
UTFって使わなくていいんでしたっけ?

302:デフォルトの名無しさん
03/11/19 17:48
>>301
それは JNI とは関係ない話だ。自分で調べろ。

303:デフォルトの名無しさん
03/11/19 19:56
UTF8になってるならサポート関数があったと思う

304:デフォルトの名無しさん
03/11/19 20:37
>>303
それは >>296 のサンプルに書いてあると思われ。

305:デフォルトの名無しさん
03/11/20 14:31
すみませんでした。
知ったかぶりしてますた。

306:デフォルトの名無しさん
03/11/20 19:19
SPRINTFで取得した文字列をNEW OBJECT ARRAYを用いて作った配列に格納したいのですがJAVAプログラムの実行時にエラーが出てしまいます。
何かよい方法はないでしょうか?

307:デフォルトの名無しさん
03/11/20 19:25
>>306
> SPRINTFで取得した文字列をNEW OBJECT ARRAYを用いて作った配列に格納したいのですが
C での文字列と Java での文字列は別物として考えたら?
あと、大文字小文字は正確に書け。

> 何かよい方法はないでしょうか?
JNI に手を出す前に C か Java をちゃんと勉強する事をお勧めする。

308:デフォルトの名無しさん
03/11/20 19:48
もちろん別の配列として扱っています。
ようはCの配列の中身をJava側の配列に入れたいのですが、
New jObjectで作った配列には文字変数の指定しかできないため、文字配列を指定して入れる事が難しいのです。
他の方法はありませんか?

309:デフォルトの名無しさん
03/11/20 19:52
>>308
「New jObject」って何よ。

310:デフォルトの名無しさん
03/11/21 00:46
>306
ようするにキャラクタ配列をオブジェクト配列に入れたいということ?
型が違うから、char型をCharacterオブジェクト型にしないといけないと思うけど。

JNI使うと、エラー発生時に"このエラーをSUNに報告してくれみたいな"のが出たりして
大変だと思うけど地道に頑張ってください。

311:デフォルトの名無しさん
03/11/21 01:46
ここもネタ心者が出没するよーになったか。

文字列の受け渡しで二週間もハマる馬鹿が実在するとも思えんしなぁ…

312:デフォルトの名無しさん
03/11/21 01:47
>>310
>>274

313:デフォルトの名無しさん
03/11/21 01:54
>>308
構造体はどーなりましたか?

314:ネタ心者
03/11/21 09:25
すみませんでした。
知ったかぶりしてますた。

315:310
03/11/21 09:30
>311
真面目に困ってるかと思っちまいました。

316:デフォルトの名無しさん
03/11/24 13:15
JNI_OnUnloadって本当に使える?
デバッグ出力してみたけど、通ってるように見えない。

317:デフォルトの名無しさん
03/11/24 18:48
int data[512*384];
jintArray jdata = env->NewIntArray(512*384);
env->SetIntArrayRegion(jdata,0,512*384,data);
によってできた配列jdataのメモリを明示的に開放する必要はありますか?

318:デフォルトの名無しさん
03/11/24 19:04
>>317につけたし。
最後に
return jdata;
します。

319:デフォルトの名無しさん
03/11/24 19:46
解放ってどうやってやるつもりだ?freeか?

320:デフォルトの名無しさん
03/12/20 04:24
c++でウィンドウを作り,Javaから呼び出しています。
メインのウィンドウは出ますが、ダイアログが出ません。
同じソースファイルをcから呼ぶとダイアログも表示されます。
だれか教えてください。


321:デフォルトの名無しさん
03/12/20 09:42
>>320
環境が分からん。Win32か?

322:デフォルトの名無しさん
03/12/20 16:14
320です。
すみません。win32です。VC++6でdllをつくりました。
どうやらリソースエディタで作った、メニューやダイアログが
うまく読み込めてないみたいです。
どなたかアドバイスお願いします。

323:デフォルトの名無しさん
03/12/20 17:08
>>322
具体的に、どんな関数をどのような順番で呼んで、どこで失敗したのか特定しろ。

324:デフォルトの名無しさん
03/12/20 17:30
320です。
C++ではjavaから呼ばれる関数、
そこから呼ばれるWinMain()に相当する関数、
それとメインウィンドウとダイアログの
ウィンドウプロシージャを用意しました。

WinMain()に相当する関数ではメインウィンドウの登録、
メッセージループなど一般的なWin32SDKのWinMain()で
やるようなことをしています。
インスタンスハンドルはGetWindowLong()でデスクトップの
ハンドルを取っています。
メインウィンドウのウィンドウプロシージャでは、ダイアログを開くための
DialogBox()を呼んでいて、ここで失敗し-1が帰ってきます。

325:デフォルトの名無しさん
03/12/20 17:32
わかりにくかったら申し訳ございませんが、よろしくお願いします。

320でした。

326:デフォルトの名無しさん
03/12/20 18:35
>>324
そんな説明されてもわからん。

オマエの説明じゃ埒明かんのでソース全部晒せ。

327:デフォルトの名無しさん
03/12/20 21:48
>> インスタンスハンドルはGetWindowLong()でデスクトップの
>> ハンドルを取っています。
明らかにここだろ、問題は。DllMainのHANDLEを使えばいいのでは?


328:デフォルトの名無しさん
03/12/21 04:32
320です。
できました!本当にありがとうございました。327さんのおっしゃる通りでした。
皆様何度もレス頂いて本当にありがとうございます。

329:デフォルトの名無しさん
04/01/23 01:14
Cコードってデバッグできますか?
jdbでブレイクポイント設定しても止まってくれないです。


330:デフォルトの名無しさん
04/01/23 09:15
>>329
VC++でしかJNI作ったことないけど、停止できるよ。
ちゃんと実行するプロセスにjava.exe(に相当するもの)を指定してる?

331:デフォルトの名無しさん
04/03/14 00:49
あんまり人いないね・・・なのであえてage。

最近USBデバイスと通信する必要があったのでJNIを試した。
で、下のようにエラーを通知しようとしたら、日本語文字列が化けますた。

jclass jc = env->FindClass( "java/io/IOException" );
env->ThrowNew( jc, "日本語文字列" );

下のサイトを参考にUnicodeに変換しても駄目。
URLリンク(www.ki.rim.or.jp)

仕方ないのでExceptionのサブクラスを作ってエラーメッセージを固定した。
当初の目的は果たせんだけど、すっきりしない。誰か解決法知らない?

332:デフォルトの名無しさん
04/03/14 01:01
日本語で困ったことはないな。
お前のコードが腐ってるんだろうよ。さらしてみ。

333:331
04/03/14 01:11
上のサイトの一番下のDLL側コードの
char* src = "こんばんわ";
より下のソースをreturn result; → env->ThrowNew( jc, result);に
変更しただけなんだけど・・・

334:デフォルトの名無しさん
04/03/14 01:20
そのサイトのコードそのままだと日本語はちゃんとでるの?

335:デフォルトの名無しさん
04/03/14 01:52
>> env->ThrowNew( jc, result);に
2番目、jstringじゃだめでしょ。
szWideでいけない?


336:デフォルトの名無しさん
04/03/14 03:25
CのプログラムからHORB(つまりJAVAをつかった関数)をつかって離れた端末の関数をたたくってことはできますか?

337:デフォルトの名無しさん
04/03/14 03:31
>>336
できるよ。

HORB使うと決まっているのなら、CのプロセスとJavaのプロセスを両方たてて、
socketなんかでプロセス間通信したほうが楽だと思う。

338:デフォルトの名無しさん
04/03/14 04:09
>>337
情報ありがとうございます。

それならば、Cのプロセスと離れた端末のCのプロセスでソケット通信した方がいいですね。
HORBは、非常に簡単に離れた端末の関数をたたけるのは知っています。
C<->JAVA間のインタフェース設計が、普通に関数をたたくように設計でき、かつ簡単ならばチャレンジしようかなと思ったしだいです。

339:デフォルトの名無しさん
04/03/14 14:56
なぜにいまさらHORB?
RMI-IIOPするほうが現実的かと。


340:331
04/03/15 23:35
試した結果、>331であげたサイトのままだと無理だった。
nWideLength以下を下のように変更すると日本語を正しく表示できた。

int nWideLength = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,src, strlen(src),0,0);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,src, strlen(src),szWide,nWideLength);
jstring result = env->NewString(szWide, nWideLength);
return result;

で、そのままreturn result; だけをenv->ThrowNew(jc,result);もenv->ThrowNew(jc,szWide);
にしても日本語は文字化けしたままだ。もうだめぽ。


341:デフォルトの名無しさん
04/03/16 01:10
んー、そこまではできてるなら
ThrowNewはあきらめてThrowを使うとか。
Exceptionのインスタンスはjstring引数にして生成する。


342:341
04/03/16 01:35
あー、わかった。そこでできてるWCHARを
WideCharToMultiByteでCP_UTF8のcharにして渡せばいいんだ。

343:デフォルトの名無しさん
04/03/16 22:57
ThrowNewのchar*が食えるのは、なるたけメモリを確保せずにthrowするための
緊急回避なんじゃねえかなあ。

344:デフォルトの名無しさん
04/04/07 10:37
Java側 → Win32dllは、JNIにて実現できる通信ですが、
Win32exe(プロセス) → Java側を実現するには、どのような手段が一番いいですかね?

アプリケーション間通信だけできればいいので、できればあまり大げさにはしたくないです。
Win32間でないからパイプは無理だし、一つのOS上での通信なのでソケット通信は少々大げさかなと。

345:デフォルトの名無しさん
04/04/07 10:38
>>344
>Win32間でないからパイプは無理
嘘だろ?

346:デフォルトの名無しさん
04/04/07 11:06
>>345
Javaでパイプ使えるか?

347:デフォルトの名無しさん
04/04/07 11:12
Win32API中のパイプ関連のAPIを全てJNIでラップしたら
使えるんでないの?

348:デフォルトの名無しさん
04/04/07 14:32
>>345 Javaでパイプは使えるよ。

349:デフォルトの名無しさん
04/04/07 15:03
>>348
それって、Javaのスレッド間通信のためのパイプであって、Win32-Java間のパイプではないんでないの?

350:デフォルトの名無しさん
04/04/07 15:20
>>348
それって NIO の Pipe の事いってんの?

個人的には >>347 で NIO の Pipe 実装するのが良いかと。

351:デフォルトの名無しさん
04/04/07 16:16
>>349 パイプって標準入出力みたいにOSが提供する入出力だろ。名前付きでも、名前無しでも。

352:デフォルトの名無しさん
04/04/07 16:27
>>351
OSが提供する入出力を、Javaは間接的にしか利用できないから、
それを使ってWin32とは対話できないのでは。

353:デフォルトの名無しさん
04/04/07 23:02
win32の中でJVMを生成する、ってのはダメなの?

354:デフォルトの名無しさん
04/04/07 23:52
> 一つのOS上での通信なのでソケット通信は少々大げさかなと。

これが一番やりやすいと思う。

355:デフォルトの名無しさん
04/06/04 21:22
SWIGの日本語ページってどうなったか誰か知りませんか?
URLリンク(swig-jp.dyndns.org)

ちなみに本家URLリンク(www.swig.org)

356:デフォルトの名無しさん
04/06/06 00:04
おまえら、SolarisとLinuxプラットフォーム以外の環境で、
native内でシグナルハンドラ使うんじゃねーぞ。

357:デフォルトの名無しさん
04/06/06 00:40
native内でC++例外使うとcatchしているにもかかわらず落ちるバグは
直ったんですかね?(linux)

358: 
04/06/30 11:18
パッケージを使ったJNIで質問です。

C:\home\javaにhoge.javaを置いてコンパイル
hoge.javaはパッケージfooに置くことにする
ここまでで hoge.java ->C:\home\java
hoge.class->C:\home\java\foo

javah -jni foo.hogeでヘッダファイル作成。
foo_hoge.hを元にしてfoo_hoge.cppを作成。
リンクしてhoge.DLLを作成
ここまでで foo_hoge.h, foo_hoge.cpp -> C:\home\java
hoge.dll -> C:\home\java\foo

この後、C:\home\javaからjava foo.hogeを実行すると
UnsatisfiedLinkError例外が発生してしまいます。
hoge.java内のSystem.loadLibrary("hoge")で
エラーが発生しているとコンパイラは怒ってますが原因がわかりません

識者の方々、アドバイスお願いします。


359:デフォルトの名無しさん
04/06/30 11:29
>>358
dll の置き場所が悪い。

360:358
04/06/30 11:41
dllファイルを*.javaファイルと同じ場所に置いたら上手く動作しました。
てっきり*.classファイルと同じ場所に置くものと勘違いしてました。
>>359様、ありがとうございました。

361:デフォルトの名無しさん
04/08/12 01:04
「-> か ->* の左には構造体のポインタが必要」

nativeのソース(C言語)をコンパイルすると上のようなエラーが出るのですがなぜですか?
エラーが出ている箇所は以下の文です。

return env->NewStringUTF("Hello World");

インクルードパスはきちんと追加しています。
javahで作成したヘッダもインクルードしています。

362:デフォルトの名無しさん
04/08/12 07:05
JNIのこと知らんが、こうしてみたら?
return NewStringUTF(env, "Hello Wrold");


363:デフォルトの名無しさん
04/08/12 07:19
C と C++ じゃ JNI の呼び出し方が違う。C だと
return (*env)->NewStringUTF(env, "Hello World");
としなければいけないはず。

364:361
04/08/13 01:14
ありがとうございます。解決しました。
もう一つ質問があるのですが、java側で用意したint型の二次元配列にnative側から値を入れる方法がわかりません。
色々とやってみたんですが、実行時にエラーが出てしまいます。

365:デフォルトの名無しさん
04/08/13 01:20
エラー?

366:361
04/08/13 04:58
/*JAVA側のソース*/
public class HelloJNI{

public static native void JNITest(int intAry[][]);

static{System.loadLibrary("HelloJNI");}

public static void main(String args[]){
int intAry[][] = new int[64][64];
for(int i=0; i<12;i++){
for(int j=0; j<16;j++){
intAry[i][j] = 0;
}
}
JNITest(intAry);
for(int i=0;i<12;i++){
for(int j=0;j<16;j++){
System.out.print(intAry[i][j]+" ");
}
}
System.out.println("--------------------------");
}
}


367:361
04/08/13 04:59
/*native側のソース*/

#include <stdio.h>
#include "HelloJNI.h"

JNIEXPORT void JNICALL Java_HelloJNI_JNITest
(JNIEnv *env, jclass clazz, jobjectArray jobjArray){
int i, j;
int c=0;

jobject **array = (*env)->GetObjectArrayElement(env, jobjArray, NULL);


for(i = 0; i<12;i++){
for(j=0;j<16;j++){
array[i][j] = c;
c++;
}
}
(*env)->ReleaseIntArrayElements(env, jobjArray, array,0);
}


368:361
04/08/13 05:03
intAryに0,1,2,3,4,…
というふうに値を入れたいのですが、どうすればいいですか?

369:デフォルトの名無しさん
04/08/13 10:19
>>367
試してないので間違ってるかもしれんが こんな感じにしないとダメじゃないか?

for(i = 0; i < (*env)->GetArrayLength(env, jobjArray); i++){
 jintArray jintarray = (jintArray)(*env)->GetObjectArrayElement(env, jobjArray);
 jint *jint = (*env)->GetIntArrayElements(env, jintarray, NULL);
 for(j = 0 ; j < (*env)->GetArrayLength(env, jintarray); j++){
  jint[j] = c++;
 }
 (*env)->ReleaseIntArrayElements(env, jintarray, 0);
}


370:デフォルトの名無しさん
04/08/13 21:53
#ifdef __cplusplus
#define ENV (*env)
#else
#define ENV env
#endif


ENV->GetArrayLength(env, array);

371:デフォルトの名無しさん
04/08/17 14:31
>>370
それC++じゃコンパイル通らんだろ。

372:デフォルトの名無しさん
04/10/14 01:11:03
>>370
逆じゃないの?

373:デフォルトの名無しさん
04/10/14 02:56:47
逆ではあるが、それを正したところでC++じゃだめだし。

374:デフォルトの名無しさん
04/12/09 00:41:58
JNIでdefineClassメソッドを使ってbyte配列から取得したクラス情報を元に、インスタンスって生成できますか?
それにしても、JNIのDefineClassってどうやって使うんだろう・・。

375:デフォルトの名無しさん
04/12/09 00:48:26
DefineClassってJNIじゃないだろ


376:374
04/12/09 00:55:46
>>375
クラス操作 DefineClass
jclass DefineClass(JNIEnv *env, jobject loader, const jbyte *buf, jsize bufLen);
raw クラスデータのバッファからクラスをロードします。
パラメータ:
env: JNI インタフェースポインタ
loader: 定義されたクラスに割り当てられるクラスローダ
buf: .classファイルデータを含むバッファ
bufLen: バッファ長
戻り値: クラスオブジェクトを返します。エラーが発生した場合は null を返します。

URLリンク(java.sun.com)


377:デフォルトの名無しさん
04/12/09 01:17:16
いや、それやりたいのならJNI必要ないだろうという意味だ
コアAPIでできるんだから


378:374
04/12/09 07:48:29
>>377
それをネイティブコードでかけるかという質問なんです。

379:デフォルトの名無しさん
04/12/09 08:06:41
>>378
書けるだろ。
JNIじゃなくてJavaのクラスファイルに関する知識が必要になるだけで。

380:デフォルトの名無しさん
04/12/09 13:37:48
>>374がどういった場面でこれを使おうとしているのかわからない・・・

381:374
04/12/09 21:56:27
>>379
Javaオンリーでは実装したことあるのですが、
JNIに移植したとたんセキュリティエラーになりませんか?

382:デフォルトの名無しさん
04/12/09 22:58:25
あふぉぅな質問するけどよ

JNIって何て読むの??

ジニ??
ジェイエヌアイ


読めなくて"Java Native Interface "って読んでまつ。。

383:デフォルトの名無しさん
04/12/09 22:59:57
IT用語辞典 e-Words : JNIとは 【Java Native Interface】 ─ 意味・解説
URLリンク(e-words.jp)

384:デフォルトの名無しさん
04/12/11 12:30:12
>>379
書いてみて。

385:デフォルトの名無しさん
04/12/11 12:32:09
書いてみた。

386:デフォルトの名無しさん
04/12/11 12:52:25
>>385
ん?どこに?

387:デフォルトの名無しさん
04/12/13 13:46:25
.netのC#で作った.dllファイルでJNIってできませんか?


388:デフォルトの名無しさん
04/12/13 18:49:12
>>387
それを言うなら
#NI(シャープニー)だろ?
グぐれ

389:デフォルトの名無しさん
04/12/14 03:15:20
>>387
.netのC#で作った.dllファイルのメソッドを呼ぶdllを作ればいい

390:デフォルトの名無しさん
04/12/18 21:10:34
>>376
JNIインタフェースのDefineClassって、
バージョン毎にシグネチャが異なるのか?
それともヘルプが間違ってるだけなのか?

あと使い方誰か教えてくれ。
何度やってもネイティブコード上でうまくインスタンスを取得できない。

391:デフォルトの名無しさん
04/12/18 21:48:44
URLリンク(www.atmarkit.co.jp)

392:デフォルトの名無しさん
04/12/18 22:24:33
>>391
……上手くいかない理由がわかったような気がする。

393:390
04/12/18 23:04:05
>>392
教えてくれ!
何が原因なんだ。
つーか、仕様上無理なのか?

394:デフォルトの名無しさん
04/12/18 23:08:43
つーか、バイトコードを暗号化しても、すぐにやぶられるって。

395:デフォルトの名無しさん
04/12/18 23:10:13
>>394
>>390 がやっても、ってんなら同意。

396:デフォルトの名無しさん
04/12/19 13:04:15
どうせVMが実行するときにデコードしてるんだからいみないな

397:390
04/12/19 13:40:24
>>394
>>395
>>396
そこからクラスファイルを生成し、ソース入手可と言っている?

398:デフォルトの名無しさん
04/12/19 15:41:10
> そこからクラスファイルを生成し、ソース入手可と言っている?
可能。

せいぜい>390がいくら頑張っても、Jad使ってお手軽一発変換、ってのを防ぐ程度の
ことしかできんだろう。

399:デフォルトの名無しさん
04/12/19 16:02:26
そういうこと

苦労してJNIでクラスローダ作ったところでいくらでもいじられるんだし
JNIのコードだってスタックサイズの制限とかで大きいの作れないんだから
余裕で解析されるだろうな

それくらいなら帯域とかあるだろうがURLクラスローダを継承して通信を暗号化、
毎回ロードするほうがまだ現実的

ネトゲとかでいくらネイティブコードでもbotとかツールとかなくせないわけだしね
安全性のためにJNIってのは意味ない

400:デフォルトの名無しさん
04/12/20 00:03:00
>>399
> それくらいなら帯域とかあるだろうがURLクラスローダを継承して通信を暗号化、
> 毎回ロードするほうがまだ現実的

「まだ現実的」ってのがどういうことを意図しているのかよくわからんが、
JNIでクラスローダ作るのって大した手間じゃないし
ネットワークを意識しなきゃならんほうがいろいろ面倒だと思うがね。

401:390
04/12/20 00:21:26
>>399
> それくらいなら帯域とかあるだろうがURLクラスローダを継承して通信を暗号化、
> 毎回ロードするほうがまだ現実的
それこそURLクラスローダクラスをリバースコンパイルされるので、無意味のような気が・・・。
データの暗号化で無く、データを扱うモジュールの暗号化をここでは問題視しているんです。

>>400
>JNIでクラスローダ作るのって大した手間じゃないし
おお!本当ですか?
是非是非ソースレベルで教えてください。
先ほどちょっと妥協して試してみたんですが、
FileInputStreamをJNIで実装しようとしたんですが、
これもやはりうまくいきませんでした・・。
JNI、むずいっす。



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch