代码如下:
#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函数,是不是上面的写法?
#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 的路径内。
jvm = new JavaVM();
env = new JNIEnv();
还是不对,还是在JNI_CreateJavaVM出错?当前目录中有ConnLDAP.class的,classpath中也有。
jvm = new JavaVM();
env = new JNIEnv();
不知道实际上要不要?