JNI编码,从Java到C

JNI coding, from Java to C

我在 Java 中有一段代码需要使用 JNI 并用 C 编写。

此方法是从另一个 class 调用的,因此 'newName' 是从另一个 class 传递给它的。我还有一个播放器 class,它有一个设置播放器名称的方法。然后我 return 一个字符串,包含 'newName' 和 'dodMap.getGoal()' ,它在另一个 class.

中定义
public class gameLogic implements GameInterface {

private gameMap dodMap;
...


public String clientHello(String newName, Player player) {
    // Change the player name and then say hello to them
    player.setName(newName);
    return "HELLO " + newName + "\nGOAL " + dodMap.getGoal();
}

我已经阅读了一些 JNI,并创建了一个 .h class 'javah' 并得到了这个:

JNIEXPORT jstring JNICALL Java_gameLogic_clientHello (JNIEnv *, jobject, jstring, jobject);

我知道如何处理字符串,但是我不知道如何处理播放器对象以及如何调用 dodMap.getGoal();

如有任何帮助,我们将不胜感激。

如果您必须通过 JNI 访问 Java 对象的字段和方法——这似乎是练习的目的——那么您需要熟悉一下与 JNI docs。它们包含您所询问的确切类型的示例,以及所有 JNI 函数的参考,以及使用 JNI 需要了解的总体信息。

您需要的一些 JNI 函数是:

由于代码中的固定字符串没有 Java 字符串可依赖,因此您可能希望使用 C 数组操作来构建 return 值(相反,比方说, 到使用已经讨论过的方法来调用 String.concat())。涉及的功能包括

请务必注意 jcharchar 之间的区别。

您可能已经从我刚刚命名的不同函数的数量中猜到,要求您做的事情既不简单也不有趣(但 可行的)。只要有可能,最好设计 JNI 接口,以尽量减少在本机代码中使用 Java 对象的需要。