C/C++ を使用して Java のネイティブ メソッド インターフェイス (JNI) を実装する (4) JNI データ型

JNI プログラミング (C/C++)

セクション 1: クイック スタート

プロセスをすばやく実行するための簡単なデモ詳細については、「C/C++ を使用して Java のネイティブ メソッド インターフェイス (JNI) を実装する (1) クイック スタート」を参照してください。

セクション 2: 詳細な例 (C 言語版)

このセクションでは、セクション 1 の内部例の詳細な説明 (C) を提供します。詳細については、「C/C++ を使用して Java のネイティブ メソッド インターフェイス (JNI) を実装する (2) 例の詳細な説明 (C 言語版)」を参照してください。

セクション 3: 例の詳細な説明 (C++ 言語版)

このセクションでは、セクション 1 (C++) の内部例の詳細な説明に焦点を当てます. 詳細については、「C/C++ を使用して Java のネイティブ メソッド インターフェイス (JNI) を実装する (3) 詳細な例 (C++ 言語版)」を参照してください。

セクション 4: JNI データ型

Java のデータ型は、プリミティブ、オブジェクト、[] 型の配列に分けられます。

jni.h での Java の 8 つの基本データ型と C の基本データ型のマッピング関係は次のとおりです。

Java プリミティブ型 C プリミティブ型 JNI typedef
整数 長さ ジント
長さ _int64 長さ
バイト 署名された文字 jバイト
ブール値 符号なし文字 jboolean
チャー 署名なしの短い jchar
短い 短い jshort
浮く 浮く jfloat
ダブル ダブル jdouble

また、jni.hはJavaのObjectクラスのマッピング関係も定義しており、Class、String、Throwableなどの最終スーパークラスはObjectですが、より一般的に使用されるため、別の定義と操作方法を持っています。

Java オブジェクト タイプ C 型 (JNI で定義) JNI typedef
物体 _jobject* ジョブジェクト
クラス _jclass* jクラス
投げられる _jthrowable* jthrowable
_jstring* jstring
[] _切る* 切り落とす

ここでの jarray は Array クラスではなく、Array クラスは通常のオブジェクトにマップされますが、[] で定義された元の配列であることに注意してください。

基本的なデータ型について詳しく説明する必要はありません。これは、主に Object 型のデータ関連メソッドに依存する C の対応するネイティブ型があるためです。

セクション 5: jstring クラスや jobject クラスなどのオブジェクト データのメソッド

このセクションでは、JNI で最も一般的に使用される jstring (java.lang.String) と jobject (Object) の操作メソッドについて詳しく説明します. 詳細については、「C /C++ を使用して Java のネイティブ メソッド インターフェイス (JNI) を実装する (5) jstring」を参照してください。 class などのオブジェクトデータの class および jobject メソッド

セクション 6: さまざまな JNI データ型のコード例

このセクションでは、前のセクション 1 ~ 5 を組み合わせて、複数のデータ型を含むサンプル JNI-C++ コードを記述します. 詳細については、「C/C++ を使用して Java のネイティブ メソッド インターフェイス (JNI) を実装する (6) 複数の JNI データ型コードの例」を参照してください

付録: コード

プロジェクト全体のリソース パッケージ リンク: JNI_C/C++_Demo

おすすめ

転載: blog.csdn.net/O_1CxH/article/details/125587980