其实就是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