类似jni,如何在c++中调用java代码? 最好能够传递对象等等 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕,你应该到C++版去问才对啊,这是JAVA版,我们怎么知道。 // JAVAclass Callbacks { private native void nativeMethod(int depth); private void callback(int depth) { if (depth < 5) { System.out.println("In Java, depth = " + depth + ", about to enter C"); nativeMethod(depth + 1); System.out.println("In Java, depth = " + depth + ", back from C"); } else System.out.println("In Java, depth = " + depth + ", limit exceeded"); } public static void main(String args[]) { Callbacks c = new Callbacks(); c.nativeMethod(0); } static { System.loadLibrary("MyImpOfCallbacks"); }}// C ++JNIEXPORT void JNICALLJava_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth){ jclass cls = (*env)->GetObjectClass(env, obj); jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V"); if (mid == 0) { return; } printf("In C, depth = %d, about to enter Java\n", depth); (*env)->CallVoidMethod(env, obj, mid, depth); printf("In C, depth = %d, back from Java\n", depth);} 其实也就是GetObjectClass -->GetMethodID-->Call<Primary>Method 的过程 建议楼主去看看J2SE的源码,具体是src.zip里面,launcher目录下的4个文件:java.cjava.hjava_md.cjava_md.hjava.exe就是这几个文件编译成的。 英雄会之在线笔试面试,等你来挑战(更新至2013/5/22) MyEclipse 工程前面有个红x 请问一下我该如何找到错误所在? 看不懂这个代码,请帮忙看下。 用JAVA可以开发 网络游戏的外挂吗 比如 自动打怪 自动吃药 谁能介绍一下JVM的运行机制,语言简洁概要,不抽象。 数组的初始化 设备不可用 怎样将int转变为支持中文的char 初学者的简单问题, 问一个关于session得非常奇怪的问题!!第一次遇见 请问怎么在一个container里同一位置加入两个jpanel,然后通过setvisible显示? 高手请教!
class Callbacks {
private native void nativeMethod(int depth);
private void callback(int depth) {
if (depth < 5) {
System.out.println("In Java, depth = " + depth + ", about to enter C");
nativeMethod(depth + 1);
System.out.println("In Java, depth = " + depth + ", back from C");
} else
System.out.println("In Java, depth = " + depth + ", limit exceeded");
}
public static void main(String args[]) {
Callbacks c = new Callbacks();
c.nativeMethod(0);
}
static {
System.loadLibrary("MyImpOfCallbacks");
}
}// C ++
JNIEXPORT void JNICALL
Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth)
{
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");
if (mid == 0) {
return;
}
printf("In C, depth = %d, about to enter Java\n", depth);
(*env)->CallVoidMethod(env, obj, mid, depth);
printf("In C, depth = %d, back from Java\n", depth);
}
java.c
java.h
java_md.c
java_md.hjava.exe就是这几个文件编译成的。