Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

Step By Step(Java 本地方法篇)(10)

来源: 未知 分享至:
//返回的是Object,这里String就是Object。
33 jobject obj_ret = env->CallStaticObjectMethod(class_System,id_getProperty
34 ,env->NewStringUTF(\"java.class.path\"));
35 //4. 从jobject到jstring的向下转型。
36 jstring str_ret = (jstring)obj_ret;
37 const char* outStr = env->GetStringUTFChars(str_ret,NULL);
38 printf(\"The java.class.path is %s.n\",outStr);
39 env->ReleaseStringUTFChars(str_ret,outStr);
40 }

    10.    在C本地方法中构造Java中的对象:
    我们为了方便起见,继续复用上面的Java代码,而只是修改C语言的本地方法,见如下代码:

 1     #include \"Printf.h\"
2 #include <stdlib.h>
3 #include <string.h>
4 #include <float.h>
5 JNIEXPORT void JNICALL Java_Printf_fprint
6 (JNIEnv* env, jclass cl, jobject out, jstring format, jdouble x)
7 {
8 const char* cformat = env->GetStringUTFChars(format,NULL);
9 char* cstr = (char*)calloc(strlen(cformat) + 20,sizeof(char));
10 sprintf(cstr,cformat,x);
11 jstring str = env->NewStringUTF(cstr);
12 free(cstr);
13 env->ReleaseStringUTFChars(format,cformat);
14
15 jclass class_PrintWriter = env->GetObjectClass(out);
16 //对应于void PrintWrite.print(String)方法
17 jmethodID id_print = env->GetMethodID(class_PrintWriter,\"print\",\"(Ljava/lang/String;)V\");
18 //这里Void是CallXxxMethod一组方法中的一个,表示调用函数的返回值类型。
19 //因此该方法的返回值也是void,如果调用CallIntMethod,其返回值将为jint。
20 env->CallVoidMethod(out,id_print,str);
21
22 //我们这里实例化的是FileOutputStream对象
23 const char filename[] = \"D:/test.txt\";
24 jstring str_filename = env->NewStringUTF(filename);
25 jclass class_FileOutputStream = env->FindClass(\"java/io/FileOutputStream\");
26 //获取构造函数时,方法名定义为<init>

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史