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
Libérer: 2024-11-13 00:15:02
original
974 Les gens l'ont consulté

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;
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal