日期:2014-05-20  浏览次数:20711 次

请教高手关于C++调用java的方法,调试时 JNI_CreateJavaVM出错
代码如下:
#include       <jni.h>      
#include       <stdlib.h>      


void   main(int   argc,   char   *argv[],   char   **envp)  
{
    JavaVMOption   options[2];
    JavaVMInitArgs   vm_args;
    JavaVM   *jvm;
    JNIEnv   *env;
    long   result;
    jmethodID   mid;
    jfieldID   fid;
    jobject   jobj;
    jclass   cls;
    int   asize;

    options[0].optionString   =   ". ";
    options[1].optionString   =   "-Djava.compiler=NONE ";

    vm_args.version   =   JNI_VERSION_1_2;
    vm_args.options   =   options;
    vm_args.nOptions   =   2;
    vm_args.ignoreUnrecognized   =   JNI_FALSE;

    result   =   JNI_CreateJavaVM(&jvm,(void   **)&env,   &vm_args);

    if(result   ==   JNI_ERR   )  
    {
printf( "Error   invoking   the   JVM ");
exit   (-1);
    }

    cls   =   env-> FindClass( "ConnLDAP ");

    if(   cls   ==   NULL   )  
    {
printf( "can 't   find   class   ConnLDAP\n ");
exit   (-1);
    }

    env-> ExceptionClear();

    mid=env-> GetMethodID(cls,   "start ",   "()V ");

    env-> CallStaticObjectMethod(cls,   mid);


    jvm-> DestroyJavaVM();

    return;
}


现在用VC60调试,

小弟有几个问题请教大侠:
1)为什么运行到JNI_CreateJavaVM出错?
2)我要调用的是同一目录下的ConnLDAP.java库中的start函数,是不是上面的写法?

------解决方案--------------------
你好像缺了
jvm = new JavaVM();
env = new JNIEnv();

另外,你要调用 ConnLDAP.java 的 start 函数,这样写虽然没错,但是运行的时候 ConnLDAP.java 是没用的,应该有 ConnLDAP.class,而且,在“当前目录下”不一定管用,应该在 classpath 的路径内。
------解决方案--------------------
web serivse