#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "hello_ParamJNI.h"


void printString(JNIEnv *env, jstring str);
char* GetStringLocalChars(JNIEnv *env, jstring str);
void ReleaseStringLocalChars(JNIEnv *env, char* str);


JNIEXPORT void JNICALL Java_hello_ParamJNI_doParam
  (JNIEnv *env, jobject obj, jint num, jstring str, jobjectArray strs) {

	printf("num=%d \n", num);

	printString(env, str);

	jstring element;
	jsize count = env->GetArrayLength(strs);
	for(int i=0; i<count; i++){
		element = (jstring)env->GetObjectArrayElement(strs, i);
		printString(env, element);
	}
}


void printString(JNIEnv *env, jstring str){
	//const char *s = env->GetStringUTFChars(str, NULL);
	char *s = GetStringLocalChars(env, str);
	printf("•¶Žš=%s \n", s);
	ReleaseStringLocalChars(env, s);
	//env->ReleaseStringUTFChars(str, s);
}




char* GetStringLocalChars(JNIEnv *env, jstring str){

	jstring enc = env->NewStringUTF("Shift_JIS");

	jclass clazz = env->FindClass("java/lang/String");
	jmethodID getBytes = env->GetMethodID(clazz, "getBytes", "(Ljava/lang/String;)[B");
	jbyteArray bytes = (jbyteArray)env->CallObjectMethod(str, getBytes, enc);

	jsize len = env->GetArrayLength(bytes);
	char *s = (char*)malloc(len+1);

	jbyte *bs = env->GetByteArrayElements(bytes, NULL);
	memcpy(s, bs, len);

	env->ReleaseByteArrayElements(bytes, bs, 0);

	s[len] = '\0';
	return s;
}

void ReleaseStringLocalChars(JNIEnv *env, char* str){
	free(str);
}


