gpt4 book ai didi

java-native-interface - JNI中jclass的类名

转载 作者:行者123 更新时间:2023-12-04 01:00:55 27 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,表明对 JNI 缺乏了解。我正在编写一个封装 Java VM 的 C++ 程序:我正在使用诸如 CallVoidMethod 之类的调用来调用 VM 中的函数。这纯粹是背景,与问题不太相关。

我希望能够找到给定 jclass 实例的 Java 类的名称。有没有办法做到这一点?我可以像在 Java 程序中那样调用 GetName 函数吗?

最佳答案

受公认答案的启发,我放置了一个适合我目的的函数

/**
* JNI/C++: Get Class Name
* @param env [in] JNI context
* @param myCls [in] Class object, which the name is asked of
* @param fullpath [in] true for full class path, else name without package context
* @return Name of class myCls, encoding UTF-8
*/
std::string getClassName(JNIEnv* env, jclass myCls, bool fullpath)
{
jclass ccls = env->FindClass("java/lang/Class");
jmethodID mid_getName = env->GetMethodID(ccls, "getName", "()Ljava/lang/String;");
jstring strObj = (jstring)env->CallObjectMethod(myCls, mid_getName);
const char* localName = env->GetStringUTFChars(strObj, 0);
std::string res = localName;
env->ReleaseStringUTFChars(strObj, localName);
if (!fullpath)
{
std::size_t pos = res.find_last_of('.');
if (pos!=std::string::npos)
{
res = res.substr(pos+1);
}
}
return res;
}

关于java-native-interface - JNI中jclass的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com