JavaでJNIを使ってみる(5)

サラトガIT日記 > Java > JavaでJNIを使ってみる(5) JavaでJNIを使ってみる(5)

※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい

2007-11-19

 

前回、「JavaでJNIを使ってみる(4)」で実際に作った Java のサンプルプログラムとヘッダファイルを紹介しました。今回は、C++ で作成したプログラムです。
(コメントは省いてます)

何か文字列を出力する簡単なサンプルを作ると、ついつい「Hello World」って書いちゃうのはなんででしょうか(笑)

#include 
#include 
#include 
#include "JniSample.h"

JNIEXPORT jstring JNICALL Java_JniSample_getWord (JNIEnv *env, jobject obj ) {
    return env->NewStringUTF("Hello World");
}

JNIEXPORT jstring JNICALL Java_JniSample_getWordParam (JNIEnv *env, jobject obj, jstring str1, jstring str2 ) {

    char buf[256];

    const char *c1 = env->GetStringUTFChars(str1, 0);
    const char *c2 = env->GetStringUTFChars(str2, 0);

    strcpy(buf, c1);
    strcat(buf, c2);

    env->ReleaseStringUTFChars(str1, c1);
    env->ReleaseStringUTFChars(str2, c2);

    return env->NewStringUTF(buf);
}

JNIEXPORT jstring JNICALL Java_JniSample_getNumber (JNIEnv *env, jobject obj, jint num ) {
    char buf[256];

    for (int i = 0; i < 10; i++) {
        num = num + i;
    }

    sprintf(buf, "%d", num);
    return env->NewStringUTF(buf);
}

JNIEXPORT void JNICALL Java_JniSample_getByteWord (JNIEnv *env, jobject obj, jbyteArray arrByte) {
    jboolean b;

    jbyte* arrData = env->GetByteArrayElements(arrByte, &b);
    arrData[0] = 5;

    env->ReleaseByteArrayElements(arrByte, arrData, 0);
}

関連記事

上記の記事に関連する記事(最新の10件)です。