从 C 应用程序调用 Java 方法
在跨平台集成领域,不同编程语言之间无缝交互的能力变得至关重要。其中一个场景涉及从 C 应用程序内调用 Java 函数。
虽然并不简单,但这一壮举确实可以通过反射方法实现。通过利用 Java 的本机接口 (JNI),C 可以与 Java 虚拟机 (JVM) 进行交互。下面是该过程的详细说明:
创建 Java 虚拟机 (JVM):
获取 Java 对象:
找到 Java 方法:
调用 Java 方法:
提取结果:
清理:
示例代码:
#include <jni.h> #include <stdio.h> int main() { 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"); // Find the class and method jclass clazz = env->FindClass("java/lang/String"); jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;"); // Call the method jobject result = env->CallObjectMethod(jstr, to_lower); // Get the C-style string const char *str = env->GetStringUTFChars((jstring)result, NULL); printf("%s\n", str); // Clean up env->ReleaseStringUTFChars(jstr, str); vm->DestroyJavaVM(); return 0; }
要在 Linux 上编译代码,请运行:
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
注意:通过检查实现正确的错误处理JNI 方法的返回码。
以上是如何从 C 应用程序调用 Java 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!