[英]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++ 代碼,但它崩潰了:
GetMethodID
和CallObjectMethodV
與 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.