background image

    
    

 

//java

 

程序的命令行参数

 

    

 

int

 

 nParamCount = 2;

    

 

const

  

char

 

 *szParams[2] = 

 

{"arg1","arg2"};

    
    

 

//

 

加载

 

JVM

 

 

    HINSTANCE jvmDll = LoadLibrary(szJvmPath);
    

 

if

 

 (jvmDll == NULL)

    

 

{

        printf("

 

加载

 

JVM

 

动态库错误。

 

%l", ::GetLastError());

        

 

return

  

false

 

;

    }
    
    

 

//

 

查找

 

JNI_CreateJavaVM

 

过程。

 

    JNICREATEPROC jvmCreateProc = (JNICREATEPROC)GetProcAddress(jvmDll, "JNI_CreateJav
aVM");
    

 

if

 

 (jvmCreateProc == NULL)

    

 

{

        FreeLibrary(jvmDll);
        printf("

 

查找

 

JNI_CreateJavaVM

 

过程错误。

 

%l", ::GetLastError());

        

 

return

  

false

 

;

    }
    
    

 

//

 

创建

 

JVM

 

 

    JNIEnv *env;
    JavaVM *jvm;
    jint r = (jvmCreateProc)(&jvm, (

 

void

 

 **)&env, &vm_args);

    

 

if

 

 (r < 0 || jvm == NULL || env == NULL)

    

 

{

        FreeLibrary(jvmDll);
        printf( "

 

创建

 

JVM

 

发生错误。

 

");

        

 

return

  

false

 

;

    }
    
    

 

//

 

重导向

 

stdout, stderr

 

到输出文件

 

    

 

if

 

 (!setStream(env, szStdoutFileName, "setOut"))

    

 

{

        printf("

 

设置

 

stdout

 

输出文件失败

 

");

        

 

return

  

false

 

;

    }
    
    

 

if

 

 (!setStream(env, szStderrFileName, "setErr"))

    

 

{

        printf("

 

设置

 

stderr

 

输出文件失败

 

");

        

 

return

  

false

 

;

    }
    
    

 

//

 

加载启动类。

 

    jclass serviceClass = env->FindClass(szStartClass);
    

 

if

 

 (env->ExceptionCheck() == JNI_TRUE || serviceClass == NULL)

    

 

{

        env->ExceptionDescribe();
        env->ExceptionClear();
        FreeLibrary(jvmDll);
        printf("

 

加载启动类失败。

 

");