Posted on 2007-02-13 16:11
gyb 阅读(1085)
评论(0) 编辑 收藏 所属分类:
JAVA JNI
将 jvm.lib 文件拷贝倒C++工程相应的目录下
对C++工程进行配置

#include "jni.h"
int main()
{
jclass javaClass;
jmethodID mid;
jstring msg;
jobject obj;
char* first;
jint res;
JNIEnv *env = NULL;
JavaVM *jvm = NULL;
JavaVMInitArgs vm_args;
JavaVMOption options[4];
vm_args.version = JNI_VERSION_1_4;
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path=.;./swt.jar";
options[2].optionString = "-verbose:jni";
options[3].optionString = "-Djava.library.path=.";
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 4;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);//创建Java VM
if(res < 0)
{
fprintf(stderr,"Can't create Java VM\n");
exit(1);
}
system("cls");
javaClass = (*env)->FindClass(env, "com/Snippet120");//得到java类
mid = (*env)->GetMethodID(env,javaClass,"<init>","()V");//得到构造方法
obj = (*env)->NewObject(env,javaClass, mid,0);//根据构造方法得到一个新的对象
/*mid = (*env)->GetMethodID(env,javaClass,"toString","()Ljava/lang/String;");//得到对象的一个方法
msg = (jstring)(*env)->CallObjectMethod(env, obj, mid);//调用方法
first = (char*)(*env)->GetStringUTFChars(env,msg,NULL);//类型转换
fprintf(stdout,"%s",first);*/
fprintf(stdout,"%s","-------");
system("Pause");
(*jvm)->DestroyJavaVM(jvm);//注销Java VM
fprintf(stdout,"Java VM destroy.\n");
exit(0);
}
创建存放目录Run(下面的文件目录在JDK安装目录中都能找倒):
Run(手工建立目录)
----bin(手工建立目录)
----classic(手工建立目录)
----jvm.dll(文件,JDK安装目录中有)
----自己的JAR包,如果是class文件把包目录和文件一起拷贝过来
如果是jar文件,需要在options[1].optionString = "-Djava.class.path=.;./swt.jar";中设置
----JniC.exe,C调用JAVA的程序
----hpi.dll(文件,JDK安装目录中有)
----ioser12.dll(文件,JDK安装目录中有)
----java.dll(文件,JDK安装目录中有)
----net.dll(文件,JDK安装目录中有)
----verify.dll(文件,JDK安装目录中有)
----zip.dll(文件,JDK安装目录中有)
----lib(手工建立目录)
----zi(目录,JDK安装目录中有,全部拷贝过来)
----rt.jar(文件,JDK安装目录中有)
----tzmappings(文件,JDK安装目录中有)