如何使用valist从C调用java vararg方法

如何使用valist从C调用java vararg方法,java,java-native-interface,variadic-functions,Java,Java Native Interface,Variadic Functions,我有带varargs的C方法 void message(int id, ...) 它应该使用vararg调用Java静态方法 public static void message(String messageName, String ... args) 如何使用C valist和JNI API实现这一点 谢谢大家! 将va_列表的地址传递给Java可能没有任何用处。下面是几个片段,展示了如何使用“…”和va_list传递数组。根据需要添加错误/异常/返回检查 在Java中: static

我有带varargs的C方法

void message(int id,  ...) 
它应该使用vararg调用Java静态方法

public static void message(String messageName, String ... args)
如何使用C valist和JNI API实现这一点


谢谢大家!

将va_列表的地址传递给Java可能没有任何用处。下面是几个片段,展示了如何使用“…”和va_list传递数组。根据需要添加错误/异常/返回检查

在Java中:

static private void javaDefineArray(Object ... args) { 
    for (Object o : args) {
        print("javaDefineArray " + o);
    }
}
在C中:

Java输出:

javaDefineArray 0
javaDefineArray 1
javaDefineArray 2
javaDefineArray 3
javaDefineArray 4

不是Java或JNI专家,但Java varargs本质上是数组,而C varargs是。。。凌乱和不安全。您的C函数可能需要正确地构建数组并调用Java函数。例如,java构造函数调用具有接收C的方法valist@Pavel当前位置我认为你高估了JNI。你愿意使用JNA吗?我知道它可以创建包装C varargs函数的Java varargs方法,我不知道它是否可以做相反的事情?假设调用是
javadefinarray(env,o,“0”,1,“56”,17.3)
?创建一个新问题并引用这个问题,看看是否有人可以帮助解决这个问题。
javaDefineArray(env, o, "0", "1", "2", "3", "4", NULL);
javaDefineArray 0
javaDefineArray 1
javaDefineArray 2
javaDefineArray 3
javaDefineArray 4