栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在C ++应用程序中访问Java方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在C ++应用程序中访问Java方法

是的,你可以,但是它有点令人费解,并且以反射/非类型安全的方式工作(示例使用的C ++ API比C版本更干净)。在这种情况下,它将从C代码中创建Java VM的实例。如果首先从Java调用你的本机调用,则无需构造VM实例

#include<jni.h>#include<stdio.h>int main(int argc, char** argv) {    JavaVM *vm;    JNIEnv *env;    JavaVMInitArgs vm_args;    vm_args.version = JNI_VERSION_1_2;    vm_args.nOptions = 0;    vm_args.ignoreUnrecognized = 1;    // Construct a VM    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);    // Construct a String    jstring jstr = env->NewStringUTF("Hello World");    // First get the class that contains the method you need to call    jclass clazz = env->FindClass("java/lang/String");    // Get the method that you want to call    jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase",     "()Ljava/lang/String;");    // Call the method on the object    jobject result = env->CallObjectMethod(jstr, to_lower);    // Get a C-style string    const char* str = env->GetStringUTFChars((jstring) result, NULL);    printf("%sn", str);    // Clean up    env->ReleaseStringUTFChars(jstr, str);    // Shutdown the VM.    vm->DestroyJavaVM();}

编译(在Ubuntu上):

g++ -I/usr/lib/jvm/java-6-sun/include      -I/usr/lib/jvm/java-6-sun/include/linux      -L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm jnitest.cc

注意:为了实现正确的错误处理,应检查每种方法的返回代码(为方便起见,我将其忽略了)。例如

str = env->GetStringUTFChars(jstr, NULL);if (str == NULL) {    return; }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号