Previous | Next | Trail Map | Integrating Native Methods into Java Programs | ネイティブメソッドを実装する


ネイティブメソッド実装で C++ を使用する

javah プログラムは C 言語ヘッダとソースファイルを作成し、C 言語コードを Java と統合する接着剤の役割を提供する。 同様に Java に C++ コードを統合するために、これらの C 言語ヘッダとソースファイルを使用することができる。

これを行うためには、C++ が C 言語関数名で名前の符号化を行わないことを保証しなくてはならない。 JDK 1.0.2 リリースを使用しているなら、生成されるヘッダファイル内の関数宣言をextern "C" ブロックで枠がこみすることにより、 javah は自動的にこれを行う。 JDK 1.0.2 以前のリリースを使用しているなら、手動でこれを行わなくてはならない。 このレッスンを通じて種々の例で使用する NativeExampleクラスを使い javah によって作成したものを C++ で動作するように修正したヘッダファイルのバージョンを次に示す:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class NativeExample */

#ifndef _Included_NativeExample

typedef struct ClassNativeExample {
    long myValue;
} ClassNativeExample;
HandleTo(NativeExample);

extern "C" {
struct Hjava_lang_String;
extern struct Hjava_lang_String *NativeExample_quote(struct HNativeExample *,long);
extern long NativeExample_twoTimes(struct HNativeExample *);
struct HNativeExample;
extern struct HNativeExample *NativeExample_doubleUp(struct HNativeExample *);
}

太字の行は javah による生成後にヘッダファイルに追加されたコードを示す。 ヘッダファイルを変更した後に、 javah を実行する場合、再度ファイルを変更しなければならないので注意する。

ネイティブメソッドの実装は C++ クラスで組み込まれていないことがある。 それらは大域関数でなければならない。


Previous | Next | Trail Map | Integrating Native Methods into Java Programs | ネイティブメソッドを実装する