忍者ブログ
よくわからないことを調べて解説してみるブログ。

2017

1214
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2012

1231
JVM.dllがクラッシュしまくった。
原因は実装コードが原因。

きっちりメソッドシグネチャとパラメータの型を合わせることでケアレスミスは解決する。

Double型 は、jobject

以下を例に注意点を。
これは、void PrintWriter#print(Double msg)というメッセージ出力メソッドを呼び出す流れ。
// クラス特定
jclass printWriter = env->FindClass("Lprottype/print/sample/PrintWriter;"); // クラス探索の際は必ず「;」を忘れずにこれだけでjvmはこける。
// メソッド特定
jmethodID printD = env->GetStaticMethodID(printWriter,"print","(Ljava/lang/Double;)V"); // シグネチャの1パラメータごとに「;」をいれた方が無難。
// データ型取得。
jclass jDouble = env->FindClass("Ljava/lang/Double;"); // クラス探索
// コンストラクタ取得。
jmethodID jDoubleIns = env->GetMethodID(jDouble,"<init>","(D)V"); // プリミティブ型のdoubleはD、参照型のDoubleは、Ljava/lang/Double。オートボクシングは行われないので、必ず引数の型に合わせること。
jdouble value = 1.2424;
// Double生成。
jobject valueObj = env->NewObject(jDouble,jDoubleIns,value);
// メソッド呼び出し。
env->CallStaticVoidMethod(printWriter,printD,valueObj);

という感じです。

参照型はstringを除きjobjectで渡す。プリミティブ型を引数に取るものは、対応するj~の型を使う。

あとは、JNIのドキュメント見ればいける。
 

拍手[0回]

PR
Post your Comment
Name:
Title:
Font:
Mail:
URL:
Comment:
Pass: Vodafone絵文字 i-mode絵文字 Ezweb絵文字
ブランドコピー時計
弊社は正規品と同等品質のコピー品を低価でお客様に提供します
コピールイヴィトン、1つのフランスの贅沢品のブランド、
最初フランスの貴族達のために鞍のブランドを作るで、
今まで着いて、依然としてハイエンドに向かう
消費者の主ななる多種の製品の贅沢品の代名詞です。
当社は日本で最高品質のコピーブランド代引き激安通販人気老舗です
ブランドコピー時計 http://www.watchsjp.com
ブランドコピー時計 URL 2017/08/13(Sun)17:35:07 編集
プロフィール
HN:
たんてーくん
性別:
非公開
フリーエリア
最新CM
[09/25 http://2017.bblbuy.com]
[09/24 http://www.japanform.com]
[09/23 http://www.japanform.com]
[09/22 http://www.japanform.com]
[09/21 http://2017.bblbuy.com]
ブログ内検索
忍者ブログ [PR]
* Template by TMP