C 在 JNI 中的实现,语法更改

Implementation of C in JNI , syntax changing

JNI 教程网站上让我困惑的一件事是 C 语法的变化。我必须重写这个

/* helloworld without JNI implementation */

  #include <stdio.h>

  void main()
  {
    printf("Hello world\n");
    return;
  } 

进入这个

/* JNI implementation - HelloJNI.c */

#include "HelloWorld.h"
#include "jni.h"
#include  "stdio.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
  printf("Hello world\n");
  return;
}

对于 C 的每个 JNI 实现? 因为根据我的理解,如果答案是肯定的,如果.c文件中有100个方法似乎是错误的,我需要重写100个方法。

感谢您的回答,对菜鸟表示抱歉。

JNI 接口的东西只需要在 Java 和 C 之间的边界上。

因此,即使您有 thousand 个函数,如果您只是通过 JNI 直接调用其中两个(其他由这两个函数调用,或由这两个函数调用的其他函数,依此类推),它们是您需要更改的唯一两个函数。

换句话说,您可以执行以下操作:

/* C implementation - HelloJNI.c */

#include "HelloWorld.h"
#include "jni.h"
#include  "stdio.h"

// Normal C function, not called directly from Java.

static void output (char *str) {
  printf ("%s", str);
}

// JNI C function, called from Java.

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) {
  output("Hello world\n");
  return;
}