java - 在函数中将多个字符串从 c 传递到 java(jni)

标签 java c++ string java-native-interface

在 JNI 中,当我们想将字符串从 C 传递给 java 时,我们通过 (C++) 来实现:

return env->NewStringUTF("MY String");

因为这是一个返回语句,所以它只能被调用一次。只能将 1 个字符串从 C 传递到 Java。

我们想要将多个字符串从 C 传递给 Java 的函数呢?!

例如考虑一个函数想要传递多个字符串的情况:

void num()
{
    for(int i=0;i<10;i++)
    {
        pass i from C to java..
    }
}

我该怎么做?

注意:我知道这可以通过使用字符串数组或连接 i 并最后返回字符串来实现。另外,我知道 i 是一个整数,我知道如何在 C++ 中将整数转换为字符串。

考虑到当循环通过 i(已传递)时传递 i 是必要的。

函数保持为void就好了。

最佳答案

这可以通过
实现 a) 在 for 循环中调用 java 方法(回调)(本质上是所需数组的 setter )。
b) 传递 jbyte(int) 数组作为参数并在循环中填充它。
c)你提到的方法 - 打包返回对象(在字节数组中)并返回它;在java端解压它。

你不感兴趣的选项是最好的方法和一般采用的方法。
JNI 代码的主要重点是减少跨 Java-C 的调用(反之亦然)。如果您正在编写不平凡的代码,请尝试修改您的选项

关于java - 在函数中将多个字符串从 c 传递到 java(jni),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324326/

相关文章:

java - 是否有任何完全通用的 Map.get() 版本,即 "V get(K key)"

java - 无法从 IntelliJ IDEA 启动 Tomcat

java - 将字符串符号转换为字符

Java 中 getBytes 的 C# 模拟

java - "Prev"按钮未循环遍历数组,"Next"按钮工作正常

java - 编写一个包含整数的 ArrayList,该整数将被并发访问

c# - 转换函数以确定从 C# 到 C++ 的运算符优先级

c++ - 通过将文本文件发送到标准输入来自动测试 Visual Studio 中的 C++ 控制台应用程序?

c++ - 删除链表中的节点 C++

string - 如何从给定字符串查找给定编辑距离处的所有字符串