ava-->C++方向:
首先,用native声明接口,这个接口是留给C++来实现的
package com.hoker;
public class IVCDll ...{
public static native int initDll();
} 然后用javah命令(在bin目录下执行)
javah com.hoker.IVCDll
把生成的h文件在VC里实现即可
C++-->java方向:
我们首先保存一个虚拟机的全局指针(声明为static JavaVM* Manager::m_pJvm[1] = {NULL})
jint r = JNI_GetCreatedJavaVMs(&Manager::m_pJvm[0], 1, &s); 然后在要调用Java的地方(比如另外一个线程),先绑定到当前线程,再调用
JNIEnv *env = NULL;
(Manager::m_pJvm[0])->AttachCurrentThread((void **)&env, NULL);
jclass System = env->FindClass("com/hoker/IVCDll");
jmethodID getP = env->GetStaticMethodID( System, "OnEvent", "()I");
env->CallStaticObjectMethod(System, getP); GetStaticMethodID的最后一个参数是方法的签名,不知道怎么写的话在cmd里用javap -s 类名来查看一下就知道了
阅读(2419) | 评论(0) | 转发(0) |