在JNI中实现C,语法改变

时间:2015-03-03 06:17:18

标签: c java-native-interface

让我对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实现? 因为根据我的理解,如果答案是肯定的,我需要重写100个方法,如果.c文件中有100个方法似乎是错误的。

感谢回答,并为noobies感到抱歉。

1 个答案:

答案 0 :(得分:1)

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

所以,即使你有个函数,如果你只是直接通过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;
}