diff --git a/src/modules/Java/configure.in b/src/modules/Java/configure.in index c5df05c6c884e9e6aebbaaf580659a9ff6d45ba7..263541420372d9b66756d877ce37e2f119bf9770 100644 --- a/src/modules/Java/configure.in +++ b/src/modules/Java/configure.in @@ -122,7 +122,7 @@ if test "x$with_java" = xyes; then CPPFLAGS="-I$pike_cv_java_include_dir -I$pike_cv_java_include_dir/$pike_cv_java_sysos ${CPPFLAGS}" fi - AC_CHECK_HEADERS(jni.h) + AC_CHECK_HEADERS(jni.h winbase.h) pike_cv_java=no @@ -218,9 +218,16 @@ if test "x$with_java" = xyes; then else AC_DEFINE(HAVE_JAVA) JAVA_AVAILABLE=1 - if test "x$pike_cv_java_java_home" = x; then :; else + if test "x$pike_cv_java_java_home" = xno; then :; else AC_DEFINE_UNQUOTED(JAVA_HOME, "${pike_cv_java_java_home}") fi + if test "x$pike_cv_sys_os" = xWindows_NT ; then + dnl We'll do LoadLibrary ourselves instead of relying on jvm.lib to + dnl do it for us. That way we'll avoid nasty popup dialogs... + JAVA_LIBS="" + else + : + fi fi AC_MSG_CHECKING(for known machine language) diff --git a/src/modules/Java/jvm.c b/src/modules/Java/jvm.c index ac62741971cda86ab80859374091cdb152fd4a2b..03ab029a704b45349c2ae6ecd0317c8104bbe04c 100644 --- a/src/modules/Java/jvm.c +++ b/src/modules/Java/jvm.c @@ -1,5 +1,5 @@ /* - * $Id: jvm.c,v 1.2 1999/03/05 22:01:32 marcus Exp $ + * $Id: jvm.c,v 1.3 1999/06/09 23:44:33 marcus Exp $ * * Pike interface to Java Virtual Machine * @@ -16,7 +16,7 @@ #endif /* HAVE_CONFIG_H */ #include "global.h" -RCSID("$Id: jvm.c,v 1.2 1999/03/05 22:01:32 marcus Exp $"); +RCSID("$Id: jvm.c,v 1.3 1999/06/09 23:44:33 marcus Exp $"); #include "program.h" #include "interpret.h" #include "stralloc.h" @@ -36,12 +36,23 @@ RCSID("$Id: jvm.c,v 1.2 1999/03/05 22:01:32 marcus Exp $"); #include <jni.h> #endif /* HAVE_JNI_H */ +#ifdef HAVE_WINBASE_H +#include <winbase.h> +#endif /* HAVE_WINBASE_H */ + #ifdef _REENTRANT #if defined(HAVE_SPARC_CPU) || defined(HAVE_X86_CPU) #define SUPPORT_NATIVE_METHODS #endif /* HAVE_SPARC_CPU || HAVE_X86_CPU */ #endif /* _REENTRANT */ +#ifdef __NT__ +#define JNI_CreateJavaVM createjavavm +typedef jint JNICALL (*createjavavmtype)(JavaVM **, void **, void *); +static createjavavmtype JNI_CreateJavaVM = NULL; +static HINSTANCE jvmdll = NULL; +#endif /* __NT___ */ + static struct program *jvm_program = NULL; static struct program *jobj_program = NULL, *jclass_program = NULL; static struct program *jthrowable_program = NULL, *jarray_program = NULL; @@ -353,7 +364,7 @@ static void f_jobj_cast(INT32 args) jstr = (*env)->CallObjectMethod(env, jo->jobj, j->method_tostring); wstr = (*env)->GetStringChars(env, jstr, NULL); l = (*env)->GetStringLength(env, jstr); - push_string(make_shared_binary_string1((INT16*)wstr, l)); + push_string(make_shared_binary_string1((p_wchar1 *)wstr, l)); (*env)->ReleaseStringChars(env, jstr, wstr); jvm_vacate_env(jo->jvm, env); } else @@ -2673,6 +2684,21 @@ void pike_module_init(void) prog.type = T_PROGRAM; prog.subtype = 0; +#ifdef __NT__ + if((jvmdll=LoadLibrary("jvm"))==NULL) + return; + else { + FARPROC proc; + if(proc=GetProcAddress(jvmdll, "JNI_CreateJavaVM")) + JNI_CreateJavaVM = (createjavavmtype)proc; + else { + if(FreeLibrary(jvmdll)) + jvmdll = NULL; + return; + } + } +#endif /* __NT___ */ + start_new_program(); ADD_STORAGE(struct jobj_storage); add_function("cast", f_jobj_cast, "function(string:mixed)", 0); @@ -2866,6 +2892,10 @@ void pike_module_exit(void) free_program(jvm_program); jvm_program=NULL; } +#ifdef __NT__ + if(jvmdll != NULL && FreeLibrary(jvmdll)) + jvmdll = NULL; +#endif /* __NT __ */ #endif /* HAVE_JAVA */ }