Beispiel #1
0
bool createNewJavaVM( const char* PLUGIN_PATH, JavaVM** jvm, JNIEnv** env )
{
    char* fileBuffer = (char*)malloc( 16384 );
    
    if ( JAVA_HOME == NULL )
    {
        logg( "ERROR: Could not locate JAVA_HOME." );
        
        return ( false );
    }
    
    memcpy( fileBuffer, "Using Java from folder \"", 24 );
    memcpy( fileBuffer + 24, JAVA_HOME, strlen( JAVA_HOME ) );
    memcpy( fileBuffer + 24 + strlen( JAVA_HOME ), "\".", 3 );

    logg( fileBuffer );
    
	if(JAVA_VERSION == 7)
	{
		getFullPath( JAVA_HOME, "bin\\msvcr100.dll", fileBuffer );
		logg( "    Loading msvcr100.dll...");
	}
	else
	{
		getFullPath( JAVA_HOME, "bin\\msvcr71.dll", fileBuffer );
		logg( "    Loading msvcr71.dll...");
	}

    HMODULE msvcdll = LoadLibrary( fileBuffer );
    
    if ( msvcdll == NULL )
    {
        if(JAVA_VERSION == 7)
			logg( " ERROR: Failed to load msvcr100.dll." );
		else
			logg( " ERROR: Failed to load msvcr71.dll." );
        return ( false );
    }
    
    getFullPath( JAVA_HOME, "bin\\client\\jvm.dll", fileBuffer );
    logg( "    Loading jvm.dll..." );
    HMODULE jvmdll = LoadLibrary( fileBuffer );
    
    if ( jvmdll == NULL )
    {
        logg( "ERROR: Failed to load jvm.dll." );
        return ( false );
    }
    
    logg( "Successfully loaded Java dlls." );
    
    logg( "Invoking Java VM..." );
    
    const unsigned int NUM_OPTIONS = 7;
    JavaVMOption options[NUM_OPTIONS];
    
    setBuffer( "-Djava.class.path=", fileBuffer );
    addPostFix( PLUGIN_PATH, fileBuffer );
    addPostFix( "\\rfdynhud.jar", fileBuffer );
    
    // TODO: Detect rFactor version somehow!
    addPostFix( ";", fileBuffer );
    addPostFix( PLUGIN_PATH, fileBuffer );
    addPostFix( "\\rfdynhud_gamedata_rfactor1.jar", fileBuffer );
    
    addPostFix( ";", fileBuffer );
    addPostFix( PLUGIN_PATH, fileBuffer );
    addPostFix( "\\editor\\rfdynhud_editor.jar", fileBuffer );
    
    options[0].optionString = cropBuffer2( fileBuffer );
    options[1].optionString = cropBuffer2( addPreFix( "-Dworkdir=", setBuffer( PLUGIN_PATH, fileBuffer ) ) );
    options[2].optionString = "-Xms512m";
    options[3].optionString = "-Xmx512m";
    options[4].optionString = "-XX:MaxGCPauseMillis=5";
    options[5].optionString = "-XX:+UseAdaptiveSizePolicy";
    options[6].optionString = "-Xincgc";
    
    free( fileBuffer );
    
    logg( "JVM options:" );
    for ( unsigned int i = 0; i < NUM_OPTIONS; i++ )
    {
        logg2( "    " );
        logg( options[i].optionString );
    }
    
    JavaVMInitArgs vm_args;
    
    vm_args.version = JNI_VERSION_1_6;
    vm_args.options = options;
    vm_args.nOptions = 7;
    vm_args.ignoreUnrecognized = TRUE;
    
    CreateJavaVMPROC CreateJavaVM = (CreateJavaVMPROC)GetProcAddress( jvmdll, "JNI_CreateJavaVM" );
    
    if ( CreateJavaVM == NULL )
    {
        logg( "ERROR: Failed to get proc address of JNI_CreateJavaVM." );
        return ( false );
    }
    
    jint res = CreateJavaVM( jvm, (void **)env, &vm_args );
    
    if ( res < 0 )
    {
        logg( "ERROR: Failed to create Java virtual machine." );
        return ( false );
    }
    
    logg( "Successfully invoked Java VM." );
    
    return ( true );
}
Beispiel #2
0
bool createNewJavaVM( const char* PLUGIN_PATH, JavaVM** jvm, JNIEnv** env )
{
    char* fileBuffer = (char*)malloc( 16384 );
    
    if ( JAVA_HOME == NULL )
    {
        logg( "ERROR: Could not locate JAVA_HOME." );
        
        return ( false );
    }
    
    memcpy( fileBuffer, "Using Java from folder \"", 24 );
    memcpy( fileBuffer + 24, JAVA_HOME, strlen( JAVA_HOME ) );
    memcpy( fileBuffer + 24 + strlen( JAVA_HOME ), "\".", 3 );

    logg( fileBuffer );
    if(JAVA_VERSION == 7)
	{
		getFullPath( JAVA_HOME, "bin\\msvcr100.dll", fileBuffer );
		logg( "    Loading msvcr100.dll...", false );
	}
	else
	{
		getFullPath( JAVA_HOME, "bin\\msvcr71.dll", fileBuffer );
		logg( "    Loading msvcr71.dll...", false );
	}
    HMODULE msvcdll = LoadLibrary( fileBuffer );
    
    if ( msvcdll == NULL )
    {
        if(JAVA_VERSION == 7)
			logg( " ERROR: Failed to load msvcr100.dll." );
		else
			logg( " ERROR: Failed to load msvcr71.dll." );
        return ( false );
    }
    else
    {
        logg( " done." );
    }
    
    getFullPath( JAVA_HOME, "bin\\client\\jvm.dll", fileBuffer );
    logg( "    Loading jvm.dll...", false );
    HMODULE jvmdll = LoadLibrary( fileBuffer );
    
    if ( jvmdll == NULL )
    {
        logg( " ERROR: Failed to load jvm.dll." );
        return ( false );
    }
    else
    {
        logg( " done." );
    }
    
    logg( "Successfully loaded Java dlls." );
    
    logg( "Invoking Java VM..." );
    
    setBuffer( "-Djava.class.path=", fileBuffer );
    addPostFix( PLUGIN_PATH, fileBuffer );
    addPostFix( "\\rfdynhud.jar", fileBuffer );
    addPostFix( ";", fileBuffer );
    addPostFix( PLUGIN_PATH, fileBuffer );
    if ( isRFactor2() )
        addPostFix( "\\rfdynhud_gamedata_rfactor2.jar", fileBuffer );
    else
        addPostFix( "\\rfdynhud_gamedata_rfactor1.jar", fileBuffer );
    
	const bool WITH_PROFILER = false;
	const unsigned int nOptions = WITH_PROFILER ? 11 : 10;
    JavaVMOption options[nOptions];
    
    unsigned int i = 0;
	options[i++].optionString = cropBuffer2( fileBuffer );
    options[i++].optionString = cropBuffer2( addPreFix( "-Dworkdir=", setBuffer( PLUGIN_PATH, fileBuffer ) ) );
    options[i++].optionString = "-Xms96m";
    options[i++].optionString = "-Xmx96m";
    options[i++].optionString = "-XX:MaxGCPauseMillis=5";
    options[i++].optionString = "-XX:+UseAdaptiveSizePolicy";
    options[i++].optionString = "-Xincgc";
    options[i++].optionString = "-Dsun.java2d.opengl=true";
    options[i++].optionString = "-Dsun.java2d.d3d=false";
    options[i++].optionString = "-Dsun.java2d.noddraw=true";
	if ( WITH_PROFILER )
		options[i++].optionString = "-agentpath:c:\\Program Files (x86)\\YourKit Java Profiler 9.0.8\\bin\\win32\\yjpagent.dll";
    
    free( fileBuffer );
    
    logg( "JVM options:" );
    for ( i = 0; i < nOptions; i++ )
        logg2( "    ", options[i].optionString, true );
    
    JavaVMInitArgs vm_args;
    
    vm_args.version = JNI_VERSION_1_6;
    vm_args.options = options;
    vm_args.nOptions = nOptions;
    vm_args.ignoreUnrecognized = TRUE;
    
    CreateJavaVMPROC CreateJavaVM = (CreateJavaVMPROC)GetProcAddress( jvmdll, "JNI_CreateJavaVM" );
    
    if ( CreateJavaVM == NULL )
    {
        logg( "ERROR: Failed to get proc address of JNI_CreateJavaVM." );
        return ( false );
    }
    
    jint res = CreateJavaVM( jvm, (void **)env, &vm_args );
    
    if ( res < 0 )
    {
        logg( "ERROR: Failed to create Java virtual machine." );
        return ( false );
    }
    
    jclass System = (*env)->FindClass( "java/lang/System" );
    jmethodID getProperty = (*env)->GetStaticMethodID( System, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;" );
    loggSystemProperty( *env, System, getProperty, "java.vm.vendor" );
    loggSystemProperty( *env, System, getProperty, "java.vm.name" );
    loggSystemProperty( *env, System, getProperty, "java.vm.version" );
    loggSystemProperty( *env, System, getProperty, "java.runtime.version" );
    loggSystemProperty( *env, System, getProperty, "java.awt.graphicsenv" );
    
    logg( "Successfully invoked Java VM." );
    
    return ( true );
}
Beispiel #3
0
void RFDynHUDPlugin2::Error( const char* const msg )
{
    logg2( "ERROR: ", msg );
}