2017-12-06 20 views
-1

C++을 사용하여 JNI에서 벡터 객체를 전달하여 Java 메소드를 호출하는 방법은 무엇입니까? 나는 이런 식으로 뭔가를했습니다 :JNI에서 벡터를 전달하여 Java 메소드 호출

자바 :

public void methodOne(int[] data) { 
    ... 
} 

C++ : 나는 위의 을 시도하고 심지어 int 배열에의 dataVector를 변환 한 후, SIGABRT 오류를 가지고

... 
jMethodOne = env->GetMethodID(jActivityClass, "methodOne", "([I)V"); 
void mNativeMethod(std::vector<int> dataVector) 
{ 
    // how to call method one by passing the vector? I've tried following way and I got SIGABRT error, even after converting dataVector to an int array 
    env->CallVoidMethod(jObject, jMethodOne, dataVector); 
} 

+0

그럼 ... 뭐가 문제입니까? 너 해봤 니? 작동하지 않는 것은 무엇입니까? –

+0

첫 번째 줄에서 언급했듯이 "C++을 사용하여 JNI에서 벡터 객체를 전달하여 Java 메소드를 호출하는 방법은 무엇입니까?" 시도 했습니까? 예, 두 번째 문장에서 설명한대로 - "나는 이것과 비슷한 것을 가지고있다" 무엇이 작동하지 않는가? SIGABRT라는 코멘트에있다. 질문을 읽었습니까? – ashokgelal

+0

당신이 제공 한 코드는 ... 작동 했습니까? 무슨 일이 일어 났습니까? Java가 이해할 수있는 것에'std :: vector '를 적용해야 할 것입니다. –

답변

0

다음과 같이해야합니다.

void mNativeMethod(std::vector<int> dataVector) 
{ 
    unsigned long size = dataVector.size(); 
    jfloat outCArray[size]; 
    std::copy(dataVector.begin(), dataVector.end(), outCArray); 

    jfloatArray outJNIArray = jniEnv->NewFloatArray(size); 
    jniEnv->SetFloatArrayRegion(outJNIArray, 0, size, outCArray); 
    jniEnv->CallVoidMethod(jObject, jMethodOne, outJNIArray); 
}