请教大侠如何在C++中调用Java? 呵.没有试过..也很想知道..cobra 行不? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同意 yjsyjs(yjsyjs) ( ) 的意见具体实现到C++版去问问看。 java 通过jni调用c++,c++ 不能调用 java.corba的调用属于组件间的调用,和搂主的意思大相径庭。 yjsyjs(yjsyjs)你可能理解错误了我是想在C++中调用Java的库而不是想在Java中调用C++的库,后者我知道怎么用。但是前者好像没有什么讨论的。asdmonster(努力学习VC,讨回失去的信誉分) 理解我的意思了。 在C++中可以通过JNI调用Java中的方法,给你个例子int main(){ JavaVMOption options[1]; JNIEnv *env; JavaVM *jvm; JavaVMInitArgs vm_args; long status; jclass cls; jmethodID mid; jint square; jboolean not; options[0].optionString = "-Djava.class.path=."; memset(&vm_args, 0, sizeof(vm_args)); vm_args.version = JNI_VERSION_1_2; vm_args.nOptions = 1; vm_args.options = options; status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); if (status != JNI_ERR) { cls = (*env)->FindClass(env, "Sample2"); if(cls !=0) { mid = (*env)->GetStaticMethodID(env, cls, "intMethod", "(I)I"); if(mid !=0) { square = (*env)->CallStaticIntMethod(env, cls, mid, 5); printf("Result of intMethod: %d\n", square); } mid = (*env)->GetStaticMethodID(env, cls, "booleanMethod", "(Z)Z"); if(mid !=0) { not = (*env)->CallStaticBooleanMethod(env, cls, mid, 1); printf("Result of booleanMethod: %d\n", not); } } (*jvm)->DestroyJavaVM(jvm); return 0; } else return -1;} 你可以自己查看一下jni.h头文件,里面包含了所有可用的方法。 或者你可以将这些class编译成type library,这样直接可以使用COM来调用。 谢谢punpuny(),你说的编译成Type Library是如何编译法?JB中如何操作,谢谢。。明天给分,希望大家可以再说说其他见解 好像核心技术2中有,不然就是核心1。有c++调JAva和java调C++ 完了,我的IE出毛病了,想给分竟然点了之后什么反映也没有,状态条中显示“Error on Page”,倒~~~~~ C/C++的论坛肯定是不会管这个问题的。楼主好好学习一下JNI,就可以解决这个问题了。 Java通过JNI调用C,C也能通过JNI调用Java jsp里写 过程如何写 log4j的问题 请问谁有详细的 lzw 算法的详细资料? 标签库的具体创建和用法步骤? 急!!日文系统,g.drawString问题 for(Employee e : employees)的用法 这是什么意思 hibernate中的多对一问题!急啊! 高分求助 关于Iterator的问题 从borland.com当bas4.5没问题吧? 熟悉Swing的高手请进,比给分 关于JAVA读取网页内容超时的问题,特急!!!!!! 请问在Java中如何得知某个TCP端口是否已经绑定到某个服务?
具体实现到C++版去问问看。
{
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean not; options[0].optionString = "-Djava.class.path=.";
memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 1;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); if (status != JNI_ERR)
{
cls = (*env)->FindClass(env, "Sample2");
if(cls !=0)
{ mid = (*env)->GetStaticMethodID(env, cls, "intMethod", "(I)I");
if(mid !=0)
{ square = (*env)->CallStaticIntMethod(env, cls, mid, 5);
printf("Result of intMethod: %d\n", square);
} mid = (*env)->GetStaticMethodID(env, cls, "booleanMethod", "(Z)Z");
if(mid !=0)
{ not = (*env)->CallStaticBooleanMethod(env, cls, mid, 1);
printf("Result of booleanMethod: %d\n", not);
}
} (*jvm)->DestroyJavaVM(jvm);
return 0;
}
else
return -1;
}
楼主好好学习一下JNI,就可以解决这个问题了。