我有一个像这样的ENUM变量。
enum FIO
{
FIO_Error = 0,
FIO_Error_1,
FIO_Error_2
};
也是一个更改错误代码的函数:
void changeFIO (FIO_Error_Enum *errorCode)
{
*errorCode = FIO_Error_2;
}
所以我的问题是这个。我知道SWIG在包装通过引用传递给函数的变量时会很痛苦。特别是现在我正在处理一个枚举类型的变量。
我知道我必须在代码界面中进行设置以便正确执行此操作,但我遇到了真正的问题。
答案 0 :(得分:1)
%include <typemaps.i>
%define ENUM_OUTPUT_TYPEMAPS(TYPE, TYPENAME)
%typemap(in) int *OUTPUT($*1_ltype temp), int &OUTPUT($*1_ltype temp) {
if (!$input) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null");
return $null;
}
if (JCALL1(GetArrayLength, jenv, $input) == 0) {
SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");
return $null;
}
$1 = (TYPE *)&temp;
}
%typemap(argout) int *OUTPUT, int &OUTPUT {
jint jvalue = (jint)temp$argnum;
JCALL4(SetIntArrayRegion, jenv, $input, 0, 1, &jvalue);
}
%typemap(javain,
pre= " int[] temp$javainput = new int[1];",
post=" $javainput[0] = TYPE.swigToEnum(temp$javainput[0]);"
) int *OUTPUT, int &OUTPUT "temp$javainput"
%typemap(jni) int *OUTPUT, int &OUTPUT "jintArray"
%typemap(jtype) int *OUTPUT, int &OUTPUT "int[]"
%typemap(jstype) int *OUTPUT, int &OUTPUT "$*javaclassname[]"
%apply int* OUTPUT {TYPE *TYPENAME, TYPE &TYPENAME};
%enddef
ENUM_OUTPUT_TYPEMAPS(FIO_Error_Enum, errorCode);