Maison >développement back-end >C++ >Puis-je appeler des méthodes Java depuis une application C ?

Puis-je appeler des méthodes Java depuis une application C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-13 00:15:02976parcourir

Can I call Java methods from a C   application?

Comment appeler des méthodes Java à partir d'applications C

Problème :

Il est possible de invoquer des fonctions définies dans le code Java à partir d'une application C ?

Réponse :

Oui, il est possible d'appeler des méthodes Java à partir du code C, mais le processus est quelque peu complexe . Cette approche utilise la réflexion et fonctionne de manière non sécurisée.

Implémentation :

Le code C crée une instance de la machine virtuelle Java (JVM) à partir de dans le code C. Si le code natif est invoqué depuis Java, la création d'une instance de VM n'est pas nécessaire.

Voici un exemple de comment accéder à une méthode Java depuis C :

#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;

    // Create a JVM
    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

    // Create a Java String object
    jstring jstr = env->NewStringUTF("Hello World");

    // Get the class containing the method to be invoked
    jclass clazz = env->FindClass("java/lang/String");

    // Get the method to be called
    jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

    // Invoke the method on the object
    jobject result = env->CallObjectMethod(jstr, to_lower);

    // Convert the result to a C-style string
    const char* str = env->GetStringUTFChars((jstring) result, NULL);

    printf("%s\n", str);

    // Clean up
    env->ReleaseStringUTFChars(jstr, str);

    // Destroy the JVM
    vm->DestroyJavaVM();

    return 0;
}

Compilation :

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

Remarque : Il est crucial de gérer les codes d'erreur des méthodes JNI pour mettre en œuvre une gestion appropriée des erreurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn