2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

★お前らJavaはJNIで組もうぜ★

1 :chinkasu:02/10/05 14:27
このすれ立てても一人としてレスはいるとはおもっちゃ
ねーけどさ
2ちゃんのアフォにはこのレス荒らすことぐらいしかできないと
思ってるぜ
お前らに期待を裏切るような書き込みをリクエストする


2 :デフォルトの名無しさん: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

これに載ってたよ。
http://www.amazon.co.jp/exec/obidos/ASIN/4894713934/ref=sr_aps_b_/250-0833969-8419468


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)
作者に感謝
http://www.ki.rim.or.jp/~kuro/Java/JNI/JNI-03.html


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
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jndi/
コレっすか? でもコレ 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状態を返す
な感じに。

http://www.gimlay.org/~javafaq/S012.html#S012-10
を見るとやっぱりクラス作った方がいいかなと。
引数のサイズの上限は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して探し出さなければならないからであります!

参考↓
ttp://java.sun.com/j2se/1.3/ja/docs/ja/guide/jni/spec/jniTOC.doc.html

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記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

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 !
http://pc3.2ch.net/test/read.cgi/software/1041952901/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 !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

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

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


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

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

このスレのIPとって訴訟するのだけは止めてくれよ。クチビルゲ。
http://aa.2ch.net/test/read.cgi/kao/1039731177/







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

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 検索パス
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_the_search_path_used_by_windows_to_locate_a_dll.asp

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

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
ttp://www.ki.rim.or.jp/~kuro/Java/JNI/JNI-05.html
なんかが参考になるかもね

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
こんなのありますた
http://mail.gnu.org/archive/html/bug-lib-gplusplus/2000-10/msg00004.html

ショボーン
http://mail.gnu.org/archive/html/bug-lib-gplusplus/2000-11/msg00006.html

ショボーン
http://wmf.editthispage.com/discuss/msgReader$3455?mode=topic

57 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)