★お前らJavaはJNIで ..
[2ch|▼Menu]
578:576
08/03/09 01:59:56
>>577
実行環境は全く一緒、実行するプログラムも引数も全く一緒で、
inject してるバイトコードが参照してるクラスも一緒。
ターゲットプログラムのクラスからは見えるのに
ライブラクラスから見えないのはなんで?

579:デフォルトの名無しさん
08/03/09 02:11:02
クラスローダが違うとか?

580:576
08/03/09 02:40:45
了解。ちょっと調べてみる。

581:576
08/03/09 03:49:36
うーん、ちょっと手を入れてる暇がないなぁ。
当初の目的は果たしたし、とりあえずライブラリ側は
どうしても必要なら後から考える。

> 今時JNI使おうって奴はこんなレベルなんかね・・・

いや、これはもう本当にその通り。
JNI なんて触るより前に知っておくべきことだった。

582:デフォルトの名無しさん
08/07/22 19:57:59
 

583:デフォルトの名無しさん
08/07/22 20:38:03
TextSS


584:デフォルトの名無しさん
08/08/13 22:30:08
C++からJavaのnativeなメソッドに char* を返したいのだが、
jbyteArrayとかにしないとJava側で受け取れないかな?
char* のままで返せない?

585:デフォルトの名無しさん
08/08/13 22:53:38
>>584
せめて整数型にキャストするとかしないと無理。

586:デフォルトの名無しさん
08/08/13 23:32:29
>>584
っていうか char* を jbyteArray にどうやって変換するの?

587:デフォルトの名無しさん
08/08/13 23:36:45
NewDirectByteBufferという手も

588:デフォルトの名無しさん
08/08/13 23:58:38
そんなことできるんだ

589:デフォルトの名無しさん
08/08/14 00:01:29
>>587
馬鹿なおいらに具体的なサンプルコード書いてください、仏様。

590:デフォルトの名無しさん
08/08/14 01:26:18
こんな感じ?

#include <jni.h>
JNIEXPORT jobject JNICALL Java_Goodbye_getGoodbye(JNIEnv *env, jclass clazz) {
return (*env)->NewDirectByteBuffer(env, "goodbye", 7);
}

import java.nio.*;
public class Goodbye {
public static void main(String[] args) {
System.loadLibrary("goodbye");
ByteBuffer buffer = getGoodbye();
byte[] b = new byte[buffer.remaining()];
buffer.get(b);
System.out.println(new String(b));
}
private static native ByteBuffer getGoodbye();
}

591:デフォルトの名無しさん
08/08/14 08:30:15
>>590
NewDirectByteBuffer って読み書き両用にしかできないと思ったが、
C/C++ の文字列リテラルって書き込みして良いんだっけか?

592:デフォルトの名無しさん
08/08/14 09:27:52
え、read onlyのdirect bufferって作れないの

593:デフォルトの名無しさん
08/08/14 09:46:01
asReadOnlyBuffer() すりゃ読み込み専用にできるけど、
NewDirectByteBuffer した直後は書き込めるよね。

594:デフォルトの名無しさん
08/08/14 09:51:42
あぁ、asReadOnlyBuffer しても読み込み専用のビュー返すだけで
NewDirectByteBuffer で作成したバッファ自体が読み込み専用になるわけじゃないんで。

595:デフォルトの名無しさん
08/08/14 10:10:12
>>590だけならNewStringとかNewStringUTFした方が楽じゃね

NewDirectByteBufferに自前で確保したメモリ渡す時って
誰がどのタイミングでメモリ解放すりゃいいんだか良くわからんし
メモリ解放用のコールバック関数渡すわけでもないみたいだし
NewDirectByteBufferってメモリマップドI/Oみたいな
解放の必要がないアドレス渡すためにあるんじゃ

596:590
08/08/14 12:11:38
サンプル欲しいっていうから書いただけなんだからねっ
使い方に問題あるのは百も承知

>>595
一度放ったByteBufferを無効に出来ないってのがネックなんだよな
参照が切れてGCに回収されるのをWeakReferenceで待ってから解放するしかない

597:デフォルトの名無しさん
08/08/16 21:24:14
問題の少ない使い方するために記述容易性なくなるんなら
素直に byte[] とか使った方が早いんじゃねーかと思わなくも無い。

598:デフォルトの名無しさん
08/08/17 11:27:03
>>598
URLリンク(imepita.jp)



最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5020日前に更新/145 KB
担当:undef