posts - 0, comments - 0, trackbacks - 0, articles - 4
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C,C++调用JAVA

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

#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安装目录中有)