正在从jvm.dll获取FindClass函数指针
Getting the FindClass function pointer from jvm.dll
我正试图在jvm.dll中获取指向FindClass方法的函数指针。现在,我成功地用JNI_CreateJVM方法做了类似的事情,但FindClass不起作用。
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((方法中,我这样做:
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_ struct中的一个方法(我可能错了(。
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函数指针的帮助都将非常有用。谢谢:(
JNI_CreateJavaVM
是实际导出的函数,但FindClass
不是。FindClass
是JNIEnv结构中成员的名称,VM在创建env
时会将该成员初始化为函数指针。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 正在从jvm.dll获取FindClass函数指针
- JNI C FindClass函数返回null
- env->FindClass 函数返回空值