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