Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7193553
  • 博文数量: 510
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6836
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(510)

文章存档

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: C/C++

2007-10-31 10:52:12

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 类名来查看一下就知道了

阅读(2375) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~