C++调用Java

12 篇文章 0 订阅
6 篇文章 0 订阅

2005年代码归档,印象中是VC6+JDK1.2

这里有一个Chinese的java类,之所以起这个名字,应该是为了测试能否传递中文参数。

public class Chinese
{
        private static void sayHello(String name){
                System.out.println("Hello: " + name);
        }

        public static void main(String[] args){
                for(int idx = 0; idx < args.length; idx ++){
                        sayHello(args[idx]);
                }
        }
};

然后我们创建一个C++程序demo.cpp

#include <stdio.h>
#include <jni.h>
#include <jawt_md.h>
int main()
{
        JavaVMOption options[1];
        JavaVMInitArgs vm_args;
        JavaVM *jvm;
        JNIEnv *env;
        long status;

        jclass class_Chinese;
        jclass class_String;
        jobjectArray args;
        jmethodID id_main;

        //options[0].optionString = "-Djava.class.path=.";

        memset(&vm_args, 0, sizeof(vm_args));
        vm_args.version = JNI_VERSION_1_2;
        //vm_args.nOptions = 1;
        //vm_args.options = options;

        status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
        if (status == JNI_ERR)
        {
                printf("Error creating VM\n");
                return 1;
        }

        class_Chinese = (*env).FindClass("Chinese");
        id_main = (*env).GetStaticMethodID(class_Chinese, "main", "([Ljava/lang/String;)V");

        class_String = (*env).FindClass("java/lang/String");
        // Call main(String[]{""Rookie.张[中文]"})
        args = (*env).NewObjectArray(2, class_String, (*env).NewStringUTF("Rookie.Zhang"));
		(*env).SetObjectArrayElement(args, 1, (*env).NewStringUTF("Leechee.Lee"));

        (*env).CallStaticVoidMethod(class_Chinese, id_main, args);

        (*jvm).DestroyJavaVM();

        return 0;
}  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kyle-soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值