孔雀开发小屋

专注并致力于手机客户端开发
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

  • 随笔 - 103
  • 文章 - 0
  • 评论 - 251
  • 引用 - 0

常用链接

留言簿(38)

随笔分类

随笔档案

关注的博客

朋友的博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

C/C++调用Java类或方法
其实就是JNI技术,通过JNI技术可以使C/C++Java之间互相调用。

Java调用C/C++方法很简单,在java源文件中将方法声明中使用native关键字,在c/c++中实现即可。

对于C/C++调用Java相对来说有点麻烦。不过思路很简单。

1) 找到Java中的类

jclass  javaCls;

javaCls = env->FindClass("com/xxx /xxx");

 

2) 创建该类的对象(如果是静态方法,则可以跳过此步)

jobject obj;

jmethodID mid;

mid = env->GetMethodID(javaCls, "<init>", "()V");

if (mid != 0)

       obj = env->NewObject(javaCls, mid);

这里需要注意的是GetMethodID里面的第二个参数<init>,其实是构造函数的名字,这个是确定的。“()V”是一个名字标识符,可以通过javap –s java_class_name来获取该标识符。

 

3) 获取要调用的java方法的句柄

jmethodID useID = env->GetMethodID(javaCls, "setTest", "(I)V");

 

4) 调用该方法

env->CallxxxMethod(obj, useID);

CallxxxMethod这个有多种函数原型,要根据实际情况选择不同的调用,具体可以参看jni.h文件。

源码面前,了无秘密。附件是从codeproject上下载的,代码写得简单明了,我不多说。

/Files/kongque/src_CJNIJava.zip

posted on 2010-11-24 16:32 孔雀 阅读(9988) 评论(3)  编辑 收藏 引用 所属分类: Android

评论

# re: C/C++调用Java类或方法 2010-11-25 09:34 Skill

这个C++调用Java听起来蛮独特的,实用么,应用到哪些方面?多谢指点
  回复  更多评论    

# re: C/C++调用Java类或方法 2010-11-25 09:40 孔雀

@Skill

如果你有java调用c/c++的需求,那么c/c++调用java的需求也就相应的会出现。相当于是回调java的类或方法。

  回复  更多评论    

# re: C/C++调用Java类或方法 2010-11-25 10:04 Skill

还有,楼主冒昧问一下,为什么我创建的JVM会失败,直接return到结尾,找不到JVM.dll,我是把JDK中的client中的DLL导入到工程Debug下的,这样会创建失败不知为什么?请指教。
  回复  更多评论    

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理