JNI - 如何获取 Double.toString() 方法以将 jdouble 转换为 jstring

JNI - How to get the Double.toString() method to convert a jdouble to a jstring

所以我希望能够使用以下方法将 jdouble 转换为 jstring 来自 c++.

的内置 Double.toString()

这就是我想我会做的。

jdouble result;

//Get the class for Double so we can get the method id of toString().
jclass doubleObjectClass = env->GetObjectClass("Ljava/lang/Double;");

//Get the Double.toString() method ID.
jmethodID doubleToStringMethodID = env->GetMethodID(doubleObjectClass, "toString",(Ljava/lang/String;");

//Call the toString() method on result.
jstring newString = env->CallObjectMethod(..., doubleToStringMethodID, result);

现在的问题是当我调用 getObjectClass 和 CallObjectMethod 时发生了什么。

对于 getObjectClass,它需要从内存中获取作业对象,而不是描述。

对于 CallObjectMethod,我们需要 Double 对象作为参数(其中“...”是)。

所以我不知道如何继续,因为文档对 atm 没有帮助。

如有帮助将不胜感激!

当您可以访问具体 jobject 时,您使用 GetObjectClass。如果您只有一个 class 名称,那就是具有 class' 二进制名称的 FindClass 函数。您正在查找 static 方法 ID,因此这是一组不同的函数(GetStaticMethodIDCallStaticMethodID)。最后,方法签名一定要正确。

综合起来:

jdouble result;
jclass doubleObjectClass = env->FindClass("java/lang/Double");
jmethodID doubleToStringMethodID = env->GetStaticMethodID(doubleObjectClass, "toString","(D)Ljava/lang/String;");
jstring newString = env->CallStaticObjectMethod(doubleObjectClass, doubleToStringMethodID, result);