Appel de fonctions Java à partir de C
Les esprits curieux veulent savoir comment invoquer des fonctions Java à partir d'applications C. Bien qu'il soit possible d'effectuer de tels appels via la ligne de commande ou d'autres méthodes similaires, nous allons approfondir une approche plus directe.
JNI Magic
La clé de cela l'interopérabilité réside dans l'interface native Java (JNI). Il fournit un pont entre Java et d’autres langages, dont C . En utilisant les méthodes JNI, vous pouvez créer une JVM (Java Virtual Machine) à partir de C et communiquer avec elle par programme.
Exemple de procédure
Pour illustrer le processus, considérez le exemple présenté dans "Création d'une JVM à partir de C." Il fournit un guide étape par étape sur la création d'une JVM et l'appel d'une méthode à partir de C .
<code class="cpp">#include <jni.h> #include "jvmti.h" int main() { JavaVM *jvm; JavaVMInitArgs args; JNIEnv* env; const char *prop = "-Djava.class.path=/path/to/your/class/files"; args.version = JNI_VERSION_1_6; args.nOptions = 1; args.options = &opt; args.ignoreUnrecognized = JNI_FALSE; if (JNI_CreateJavaVM(&jvm, &env, &args) != JNI_OK) { // Error handling... } // Invoke Java methods here... jvm->DestroyJavaVM(); return 0; }</code>
Mises en garde contre la mise en cache
Lors de la mise en cache des pointeurs JNIEnv* vers le La JVM de C/C est tentante pour des raisons de performances, il est crucial de faire preuve de prudence. Il existe une sémantique spécifique concernant quand et ce qui peut être mis en cache. Le non-respect de ces directives peut entraîner un comportement inattendu. Pour plus de détails, reportez-vous à la documentation de référence officielle de JNI.
Aller de l'avant
Cette introduction à JNI fournit une base pour une exploration plus approfondie. Avec JNI, les possibilités d'interaction entre les applications Java et C sont illimitées.
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!