首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从jvm.dll获取FindClass函数指针

从jvm.dll获取FindClass函数指针
EN

Stack Overflow用户
提问于 2018-07-19 01:47:54
回答 1查看 111关注 0票数 0

我正在尝试在jvm.dll中获取指向FindClass方法的函数指针。现在,我成功地用JNI_CreateJVM方法做了类似的事情,但是用FindClass它不起作用。

代码语言:javascript
运行
AI代码解释
复制
class JVMInitializer {
public:
    static JVMInitializer* getInstance();
    static void destroyJVM();

    static HMODULE m_jvm_dll;
    static JavaVM *m_pJvm;                      
    static JNIEnv *m_pEnv;                      
    static JavaVMInitArgs m_VMargs;
    static decltype(&JNI_CreateJavaVM) m_createJVM_Ptr;     
    static decltype(&JNIEnv::FindClass) m_FindClass_Ptr;


private:
    static JVMInitializer* m_pJVMInstance;              

    JVMInitializer() {};
    ~JVMInitializer() {};
    JVMInitializer(JVMInitializer const&);
    JVMInitializer& operator=(JVMInitializer const&);

    static char JVMInitializer::getPathSeparator();
    bool static create_JVM();
};

然后在create_JVM()方法中,我这样做:

代码语言:javascript
运行
AI代码解释
复制
m_createJVM_Ptr = (decltype(&JNI_CreateJavaVM))GetProcAddress(m_jvm_dll, "JNI_CreateJavaVM");
m_FindClass_Ptr = (decltype(&JNIEnv::FindClass))GetProcAddress(m_jvm_dll, "FindClass");

第一个方法可以工作,程序能够成功地找到并调用JNI_CreateJVM方法,但是我在m_FindClass_Ptr中得到了编译错误。我的猜测是我调用findclass的GetProcAddress是错误的,因为它实际上是jni.h中JNIEnv_结构中的一个方法(我可能是错的)。

代码语言:javascript
运行
AI代码解释
复制
struct JNIEnv_ {
const struct JNINativeInterface_ *functions;
#ifdef __cplusplus

jint GetVersion() {
    return functions->GetVersion(this);
}
jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
                   jsize len) {
    return functions->DefineClass(this, name, loader, buf, len);
}
jclass FindClass(const char *name) {
    return functions->FindClass(this, name);
}
......

任何有关加载FindClass函数指针的帮助都会很有帮助。谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2018-07-19 11:49:41

是的,JNI_CreateJavaVM是一个实际的导出函数,但FindClass不是。FindClass是JNIEnv结构中成员的名称,VM会在创建env时将该成员初始化为函数指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51413214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档