错误:数组类型“ va_list”(又名“ __builtin_va_list”)不可分配

时间:2019-01-30 07:41:22

标签: c java-native-interface swig

我应该怎么做才能使其可分配?我已经从头文件中的该函数自动生成了JNI函数。这是头文件*

中的函数声明
  

char * stringFormatV(const char *格式,va_list args);

    SWIGEXPORT jstring JNICALL Java_jnisourceJNI_stringFormatV(JNIEnv
        *jenv, jclass jcls, jstring jarg1, jlong jarg2) {
              jstring jresult = 0 ;
              char *arg1 = (char *) 0 ;
              va_list arg2 ;
              va_list *argp2 ;
              char *result = 0 ;

              (void)jenv;
              (void)jcls;
              arg1 = 0;
              if (jarg1) {
                arg1 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg1, 0);
                if (!arg1) return 0;
              }
              argp2 = *(va_list **)&jarg2; 
              if (!argp2) {
                SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null va_list");
                return 0;
              }
              arg2 = *argp2; //here is the problem
              result = (char *)stringFormatV((char const *)arg1,arg2);
              if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result);
              if (arg1) (*jenv)->ReleaseStringUTFChars(jenv, jarg1, (const char *)arg1);
              return jresult;
            }

此行编译器给出错误

  

arg2 = * argp2; //这是问题所在

1 个答案:

答案 0 :(得分:3)

您可能想read the variable length argument documentation。特别是关于wrapping va_list的部分指出

  

据我们所知,没有明显的方法可以用SWIG包装这些功能。

简而言之,这是不可能的。

我唯一看到的解决方案是提供一个变量参数函数,SWIG为其生成函数,而该vararg函数调用了真正的stringFormatV函数。