2014-09-30 3 views
0

Я глоток, как вы преобразовать возвращаемое значение в с к поплавку [] в JavaSwig, преобразовать гр указатель плавать []

//C Function 
inline float32* b2Body::GetWorldPoint(float32 localX, float32 localY) 
{ 
    b2Vec2 val = b2Mul(m_xf, b2Vec2(localX, localY)); 
    fin[0] = val.x, val.y; 
    fin[1] = val.y; 
    return fin; 
} 

Как вы можете видеть, функция возвращает float32 *, которая является два массив элементов. В моем файле Swig я включил

%include cpointer.i 
%include "arrays_java.i" 
%apply float[] {float32*}; 

Но я получаю ошибку:

.cpp: In function '_jfloatArray* Java_com_google_fpl_liquidfun_liquidfunJNI_Body_1getWorldPoint_1_1SWIG_11(JNIEnv*, jclass, jlong, jobject, jfloat, jfloat)': 
C:/Users/Garrett/Desktop/liquidfun-master/liquidfun//Box2D/swig/jni/../gen/cpp/armeabi-v7a/liquidfun_wrap.cpp:6147:59: error: 'FillMeInAsSizeCannotBeDeterminedAutomatically' was not declared in this scope 
make.exe: *** [obj/local/armeabi-v7a/objs/liquidfun_jni/gen/cpp/armeabi-v7a/liquidfun_wrap.o] Error 1 
+1

Похоже, он говорит вам, что ему нужно знать размер возвращаемого объекта. – Ashalynd

ответ

1

Это в основном такое же решение, как an older question on the mailing list:

%include cpointer.i 
%include "arrays_java.i" 
%typemap(out) float[] 
%{$result = SWIG_JavaArrayOutFloat(jenv, (float *)$1, 2); %} 
%apply float[] {float32*}; 

С оговоркой, что, как написано это завещание приводят к тому, что SWIG предполагает, что все использование float* в качестве возвращаемого типа представляет собой массив размера 2.

Смежные вопросы