http://wind6266.blog.163.com/blog/static/6710907201112424521713/
C通過JNI調用JAVA——創建Object數組參數
2011-02-24 14:47:00| 分類: C / C++ | 標籤:c jni java newobjectarray |字號大中小 訂閱
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <tchar.h>
#include <direct.h>
#include <jni.h>
jstring jstr(JNIEnv *env,char *s){
return (*env)->NewStringUTF(env,s);
}
int main()
{
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jclass str_cls;
jmethodID mid;
jobjectArray paramArr;
char* class_name="com/example/Caller";
options[0].optionString = "-Djava.class.path=.";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
//return 0;
/* Create the Java VM */
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (status < 0 || status == JNI_ERR) {
printf("Status of creating Java VM:%d\n",status);
fprintf(stderr, "Failed to create Java VM!\n");
exit(1);
}
/*Find the class obj*/
cls = (*env)->FindClass(env, class_name);
str_cls = (*env)->FindClass(env, "java/lang/String");
if(cls !=0)
{
/* ---------------------------------------------------------- */
/*Test to invoke a static method*/
char* static_method_name="call";
char* static_method_sign="(Ljava/lang/String;[Ljava/lang/String;)I";
/*Get method ID*/
mid = (*env)->GetStaticMethodID(env, cls, static_method_name, static_method_sign);
if(mid !=0)
{
/* *********************************
create a string array
***********************************/
paramArr = (*env)->NewObjectArray(env,3,str_cls,0);
(*env)->SetObjectArrayElement(env,paramArr,0,jstr(env,"1"));
(*env)->SetObjectArrayElement(env,paramArr,1,jstr(env,"user"));
(*env)->SetObjectArrayElement(env,paramArr,2,jstr(env,"user123"));
jint result = (*env)->CallStaticIntMethod(env, cls, mid,jstr(env,"check_password"),paramArr);
printf("Call static method %s: %d\n",static_method_name,result);
}else{
printf("Failed to find method %s!\n",static_method_name);
}
}else{
printf("Failed to find Class %s!\n",class_name);
}
/*destory JVM*/
(*jvm)->DestroyJavaVM(jvm);
return 0;
}