簡體   English   中英

使用 jni 將返回 object 的 java 代碼轉換為 c++

[英]Convert java code that returns object with template into c++ using jni

我需要使用 JNI 從 C++ 調用一些 java 代碼。

我不知道如何從返回的 java 通用 JNI 中獲取值。 我需要從 C++ 調用的 Java 代碼是:

encoderCapabilities.getQualityRange().getLower()

問題是 java 返回泛型類型Range<Integer>

public Range<Integer> getQualityRange ()

我嘗試使用以下 C++ 代碼,但它崩潰了:

GetMethodIDCallObjectMethodV與 function 名稱getQualityRange和 arguments ()Landroid/util/Range; . 似乎沒有崩潰,但下一次調用崩潰:

getLower()I

你能建議什么代碼可以工作嗎?

object Range 很好,因為它的 toString 方法返回有效字符串“[1,100]”,但“getLower”在獲取方法時失敗。 更新:Botje的答案有效!

類型擦除后, Range#getLower將聲明類型Comparable ,無論 Java 源中的類型是什么。

試試這個:

jobject range = ...;
jclass cls_Range = env->GetObjectClass(range);
jmethodID mid_Range_getLower = env->GetMethodID(cls_Range, "getLower", "()Ljava/lang/Comparable;");

jobject lower = env->CallObjectMethod(range, mid_Range_getLower);
jclass cls_Integer = env->GetObjectClass(lower);
jmethodID mid_Integer_intVale = env->GetMethodID(cls_Integer, "intValue", "()I");
jint lowerInt = env->CallIntMethod(lower, mid_Integer_intValue);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM