Commit 687a562dbc1507fd8d15567dc6fd47235f9e086c
1 parent
7d4f2b4e
Exists in
master
and in
5 other branches
Experimentando plugin java em windows
Showing
3 changed files
with
70 additions
and
22 deletions
Show diff stats
src/include/plugin.mak.in
@@ -129,7 +129,8 @@ Debug: $(BINDBG)/$(PLUGIN_NAME) | @@ -129,7 +129,8 @@ Debug: $(BINDBG)/$(PLUGIN_NAME) | ||
129 | 129 | ||
130 | $(BINDBG)$(DLL_NAME): $(BINDBG)$(DLL_NAME).$(VERSION) | 130 | $(BINDBG)$(DLL_NAME): $(BINDBG)$(DLL_NAME).$(VERSION) |
131 | @rm -f $@ | 131 | @rm -f $@ |
132 | - $(LN_S) @DLLPREFIX@$(MODULE_NAME)@DLLEXT@.$(VERSION) $@ | 132 | + @rm -f $(BINRLS)@DLLDIR@/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ |
133 | + @cd $(BINDBG)@DLLDIR@ && $(LN_S) @DLLPREFIX@$(MODULE_NAME)@DLLEXT@.$(VERSION) @DLLPREFIX@$(MODULE_NAME)@DLLEXT@ | ||
133 | 134 | ||
134 | $(BINRLS)$(DLL_NAME): $(BINRLS)$(DLL_NAME).$(VERSION) | 135 | $(BINRLS)$(DLL_NAME): $(BINRLS)$(DLL_NAME).$(VERSION) |
135 | @rm -f $@ | 136 | @rm -f $@ |
src/java/plugin.cc
@@ -358,34 +358,53 @@ extern "C" { | @@ -358,34 +358,53 @@ extern "C" { | ||
358 | { "JDK_HOME", "jre\\bin\\client", 0 } | 358 | { "JDK_HOME", "jre\\bin\\client", 0 } |
359 | }; | 359 | }; |
360 | 360 | ||
361 | - kernel = LoadLibrary("kernel32.dll"); | ||
362 | - AddDllDirectory = (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory"); | ||
363 | - RemoveDllDirectory = (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory"); | 361 | + kernel = LoadLibrary("kernel32.dll"); |
362 | + | ||
363 | + debug("---[ %s ]---------------------------------------------------",__FUNCTION__); | ||
364 | + | ||
365 | + AddDllDirectory = (HANDLE WINAPI (*)(PCWSTR)) GetProcAddress(kernel,"AddDllDirectory"); | ||
366 | + if(AddDllDirectory) { | ||
364 | 367 | ||
365 | - // Acrescenta mais caminhos para achar a dll | ||
366 | - for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) { | 368 | + // Acrescenta mais caminhos para achar a dll |
369 | + for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) { | ||
367 | 370 | ||
368 | - const char *env = getenv(dlldir[f].env); | ||
369 | - if(env && AddDllDirectory) { | 371 | + const char *env = getenv(dlldir[f].env); |
370 | 372 | ||
371 | - gchar *p = g_build_filename(env,dlldir[f].path,NULL); | 373 | + debug("%s=\"%s\"",dlldir[f].env,env); |
372 | 374 | ||
373 | - debug("Adicionando diretório \"%s\"",p); | 375 | + if(env) { |
374 | 376 | ||
375 | - wchar_t *path = (wchar_t *) malloc(4096*sizeof(wchar_t)); | ||
376 | - mbstowcs(path, p, 4095); | ||
377 | - dlldir[f].cookie = AddDllDirectory(path); | ||
378 | - free(path); | 377 | + gchar *p = g_build_filename(env,dlldir[f].path,NULL); |
379 | 378 | ||
380 | - g_free(p); | 379 | + debug("Adicionando diretório \"%s\"",p); |
381 | 380 | ||
381 | + wchar_t *path = (wchar_t *) malloc(4096*sizeof(wchar_t)); | ||
382 | + mbstowcs(path, p, 4095); | ||
383 | + dlldir[f].cookie = AddDllDirectory(path); | ||
384 | + free(path); | ||
385 | + | ||
386 | + g_free(p); | ||
387 | + | ||
388 | + } | ||
382 | } | 389 | } |
390 | + | ||
391 | + } | ||
392 | +#ifdef DEBUG | ||
393 | + else { | ||
394 | + debug("Can't get %s: %s","AddDllDirectory",session::win32_strerror(GetLastError()).c_str()) | ||
383 | } | 395 | } |
396 | +#endif // DEBUG | ||
384 | 397 | ||
385 | hModule = LoadLibrary("jvm.dll"); | 398 | hModule = LoadLibrary("jvm.dll"); |
386 | 399 | ||
400 | + debug("hModule=%08lx",(long) hModule); | ||
401 | + | ||
387 | if(!hModule) { | 402 | if(!hModule) { |
388 | 403 | ||
404 | + DWORD err = GetLastError(); | ||
405 | + | ||
406 | + debug("%s",session::win32_strerror(err).c_str()); | ||
407 | + | ||
389 | GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)), | 408 | GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)), |
390 | GTK_DIALOG_DESTROY_WITH_PARENT, | 409 | GTK_DIALOG_DESTROY_WITH_PARENT, |
391 | GTK_MESSAGE_ERROR, | 410 | GTK_MESSAGE_ERROR, |
@@ -393,7 +412,7 @@ extern "C" { | @@ -393,7 +412,7 @@ extern "C" { | ||
393 | "%s", _( "Can't load java virtual machine" ) ); | 412 | "%s", _( "Can't load java virtual machine" ) ); |
394 | 413 | ||
395 | gtk_window_set_title(GTK_WINDOW(dialog),_( "JVM error" )); | 414 | gtk_window_set_title(GTK_WINDOW(dialog),_( "JVM error" )); |
396 | - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s", session::win32_strerror(GetLastError()).c_str()); | 415 | + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s", session::win32_strerror(err).c_str()); |
397 | 416 | ||
398 | gtk_dialog_run(GTK_DIALOG (dialog)); | 417 | gtk_dialog_run(GTK_DIALOG (dialog)); |
399 | gtk_widget_destroy(dialog); | 418 | gtk_widget_destroy(dialog); |
@@ -401,18 +420,27 @@ extern "C" { | @@ -401,18 +420,27 @@ extern "C" { | ||
401 | } | 420 | } |
402 | 421 | ||
403 | // Libera caminhos extras. | 422 | // Libera caminhos extras. |
404 | - for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) { | 423 | + RemoveDllDirectory = (BOOL WINAPI (*)(HANDLE)) GetProcAddress(kernel,"RemoveDllDirectory"); |
424 | + if(RemoveDllDirectory) { | ||
405 | 425 | ||
406 | - if(dlldir[f].cookie && RemoveDllDirectory) { | 426 | + for(size_t f = 0; f < G_N_ELEMENTS(dlldir); f++) { |
407 | 427 | ||
408 | - RemoveDllDirectory(dlldir[f].cookie); | 428 | + if(dlldir[f].cookie) { |
409 | 429 | ||
430 | + RemoveDllDirectory(dlldir[f].cookie); | ||
431 | + | ||
432 | + } | ||
410 | } | 433 | } |
434 | + | ||
411 | } | 435 | } |
436 | +#ifdef DEBUG | ||
437 | + else { | ||
438 | + debug("Can't get %s: %s","RemoveDllDirectory",session::win32_strerror(GetLastError()).c_str()) | ||
439 | + } | ||
440 | +#endif // DEBUG | ||
412 | 441 | ||
413 | FreeLibrary(kernel); | 442 | FreeLibrary(kernel); |
414 | 443 | ||
415 | - | ||
416 | } | 444 | } |
417 | 445 | ||
418 | 446 | ||
@@ -473,6 +501,8 @@ extern "C" | @@ -473,6 +501,8 @@ extern "C" | ||
473 | 501 | ||
474 | load_jvm(widget,hJVM); | 502 | load_jvm(widget,hJVM); |
475 | 503 | ||
504 | + debug("hJVM=%p",hJVM); | ||
505 | + | ||
476 | if(!hJVM) { | 506 | if(!hJVM) { |
477 | v3270_set_script(widget,'J',FALSE); | 507 | v3270_set_script(widget,'J',FALSE); |
478 | 508 | ||
@@ -488,6 +518,7 @@ extern "C" | @@ -488,6 +518,7 @@ extern "C" | ||
488 | 518 | ||
489 | #endif // _WIN32 | 519 | #endif // _WIN32 |
490 | 520 | ||
521 | + debug("%s",__FUNCTION__); | ||
491 | 522 | ||
492 | // Start JNI | 523 | // Start JNI |
493 | JavaVMInitArgs vm_args; | 524 | JavaVMInitArgs vm_args; |
@@ -515,6 +546,8 @@ extern "C" | @@ -515,6 +546,8 @@ extern "C" | ||
515 | 546 | ||
516 | gchar * dirname = g_path_get_dirname(filename); | 547 | gchar * dirname = g_path_get_dirname(filename); |
517 | 548 | ||
549 | + debug("Dirname=%s",dirname); | ||
550 | + | ||
518 | #if defined( WIN32 ) | 551 | #if defined( WIN32 ) |
519 | 552 | ||
520 | gchar * exports = NULL; | 553 | gchar * exports = NULL; |
@@ -523,7 +556,13 @@ extern "C" | @@ -523,7 +556,13 @@ extern "C" | ||
523 | 556 | ||
524 | if(GetModuleFileName(NULL,buffer,sizeof(buffer)) < sizeof(buffer)) { | 557 | if(GetModuleFileName(NULL,buffer,sizeof(buffer)) < sizeof(buffer)) { |
525 | 558 | ||
526 | - gchar * myDir = g_path_get_dirname(buffer); | 559 | + gchar * ptr = strrchr(buffer,G_DIR_SEPARATOR); |
560 | + if(ptr) { | ||
561 | + *ptr = 0; | ||
562 | + myDir = g_strdup(buffer); | ||
563 | + } else { | ||
564 | + myDir = g_strdup("."); | ||
565 | + } | ||
527 | 566 | ||
528 | 567 | ||
529 | } else { | 568 | } else { |
@@ -532,6 +571,8 @@ extern "C" | @@ -532,6 +571,8 @@ extern "C" | ||
532 | 571 | ||
533 | } | 572 | } |
534 | 573 | ||
574 | + debug("myDir=%s",myDir); | ||
575 | + | ||
535 | exports = g_build_filename(myDir,"jvm-exports",NULL); | 576 | exports = g_build_filename(myDir,"jvm-exports",NULL); |
536 | g_mkdir_with_parents(exports,0777); | 577 | g_mkdir_with_parents(exports,0777); |
537 | 578 | ||
@@ -550,7 +591,9 @@ extern "C" | @@ -550,7 +591,9 @@ extern "C" | ||
550 | if(!CreateJavaVM) { | 591 | if(!CreateJavaVM) { |
551 | rc = ENOENT; | 592 | rc = ENOENT; |
552 | } else { | 593 | } else { |
594 | + debug("Calling %s","CreateJavaVM"); | ||
553 | rc = CreateJavaVM(&jvm,(void **)&env,&vm_args); | 595 | rc = CreateJavaVM(&jvm,(void **)&env,&vm_args); |
596 | + debug("%s exits with rc=%d","CreateJavaVM",rc); | ||
554 | } | 597 | } |
555 | 598 | ||
556 | #else | 599 | #else |
@@ -640,10 +683,13 @@ extern "C" | @@ -640,10 +683,13 @@ extern "C" | ||
640 | 683 | ||
641 | try { | 684 | try { |
642 | 685 | ||
686 | + debug("%s: Calling CallStaticVoidMethod()",__FUNCTION__); | ||
643 | env->CallStaticVoidMethod(cls, mid, args); | 687 | env->CallStaticVoidMethod(cls, mid, args); |
688 | + debug("%s: CallStaticVoidMethod() has returned",__FUNCTION__); | ||
644 | 689 | ||
645 | } catch(std::exception &e) { | 690 | } catch(std::exception &e) { |
646 | 691 | ||
692 | + debug("Java error: %s",e.what()); | ||
647 | trace("%s",e.what()); | 693 | trace("%s",e.what()); |
648 | } | 694 | } |
649 | 695 | ||
@@ -654,6 +700,7 @@ extern "C" | @@ -654,6 +700,7 @@ extern "C" | ||
654 | 700 | ||
655 | g_free(classname); | 701 | g_free(classname); |
656 | 702 | ||
703 | + exit(-1); | ||
657 | 704 | ||
658 | jvm->DestroyJavaVM(); | 705 | jvm->DestroyJavaVM(); |
659 | } | 706 | } |
src/plugins/hllapi/Makefile.in
@@ -45,7 +45,7 @@ include $(CLASSLIBDIR)/class.mak | @@ -45,7 +45,7 @@ include $(CLASSLIBDIR)/class.mak | ||
45 | $(BINRLS)/$(PLUGIN_NAME): $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/$(SRC).o) $(BINRLS)$(DLL_NAME) | 45 | $(BINRLS)/$(PLUGIN_NAME): $(foreach SRC, $(basename $(PLUGIN_SRC)), $(OBJRLS)/$(SRC).o) $(BINRLS)$(DLL_NAME) |
46 | @echo " CCLD `basename $@`" | 46 | @echo " CCLD `basename $@`" |
47 | @$(MKDIR) `dirname $@` | 47 | @$(MKDIR) `dirname $@` |
48 | - $(CXX) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) @RLS_LDFLAGS@ -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(GTK_LIBS) $(GLIB_LIBS) $(PW3270_LIBS) | 48 | + @$(CXX) $(DLL_FLAGS) @LDSOFLAGS@ $(LDFLAGS) @RLS_LDFLAGS@ -o $@ $^ $(LIBS) $(LIB3270_LIBS) $(GTK_LIBS) $(GLIB_LIBS) $(PW3270_LIBS) |
49 | 49 | ||
50 | $(BINRLS)$(DLL_NAME).$(VERSION): $(foreach SRC, $(basename $(EXTAPI_SRC)), $(OBJRLS)/$(SRC).o) $(CLASS_RELEASE_OBJECTS) | 50 | $(BINRLS)$(DLL_NAME).$(VERSION): $(foreach SRC, $(basename $(EXTAPI_SRC)), $(OBJRLS)/$(SRC).o) $(CLASS_RELEASE_OBJECTS) |
51 | @echo " CCLD `basename $@`" | 51 | @echo " CCLD `basename $@`" |