Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: foo_java_plugin_loader: load java plugins (Read 17402 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_java_plugin_loader: load java plugins

I wrote partial Java bindings of the C++ SDK, that will allow to write
Java plugins pretty much using the same class/function names that in C++ but wrapped in java classes.

This could be interesting for plugins that would need complex UI, which is not very pratical and very time consuming using the outdated Win32 APIs. It could also be of use for plugins who'd need APIs that usually in C++ are available in several distinct package while in Java you have a lot of API included (XML parser, etc). Imagine a plugin that would export the dabase in XML for example. Of course it's not very useful for writing a DSP plugin.

This plugin is a technical prototype preview of what can be done and wraps just a few APIs:

- file_info/metadb_handle: access/modify playist item tags and attributes
- metadb_io: read/write tags
- playback_control: start/stop/pause/etc songs

And an example of notification from foobar:

- play_callback

In the zip there's the plugin itself + the java SDK bindings in the form of a jar (fb2k_java_api.jar) + 2 small demos plugins with source code:

- test: write custom tag on selected items
- test2: small player window with start/stop/pause button, track progress and basic info - source code

Download the plugin here and a documentation on how it works here.

Of course you'll need a java Runtime Environment installed for this to work. The plugin should autodetect it if present. If not let me know. Once loaded the Java plugins are accessible through the context menu in a playlist titled "Java plugins" .

If anybody is interested, let me know in which API, so I can wrap them. Technically it's been challenging to make it work, and even if it's of no use I'll have learn a few things

Future work:

- wrap more SDK APIs
- see if it's technically possible to make Java plugin that would be panels

foo_java_plugin_loader: load java plugins

Reply #1
Great job!

I love Java, it rocks! Even performance vastly improved over the years. Its fun to work with.

foo_java_plugin_loader: load java plugins

Reply #2
- see if it's technically possible to make Java plugin that would be panels

I would look into the SWT toolkit from Eclipse for that since it is based on native widgets.

I haven't had a closer look yet, but this looks like a nice project, even though it might just be for the learning experience in the worst case. I hope to find some time to give you hints about your context menu problem and about a more general approach to load-time creation of service factories.

foo_java_plugin_loader: load java plugins

Reply #3
- see if it's technically possible to make Java plugin that would be panels

I would look into the SWT toolkit from Eclipse for that since it is based on native widgets.

I haven't had a closer look yet, but this looks like a nice project, even though it might just be for the learning experience in the worst case. I hope to find some time to give you hints about your context menu problem and about a more general approach to load-time creation of service factories.


First, thanks for showing interest in this project. Initially I was interested to see if such bindings was possible and technically it looked challenging (it was). I still have to find a useful Java plugin idea that would showcase the power of the SDK but in the meantime I'll wrap more APIs.

Nothing prevents from using SWT instead of Swing even if I'm not very familiar with SWT. However using Swing with the Windows Look & Feel doesn't look too alien. As for making panels compatible with foo_ui_columns, as long as I can retrieve the Java plugin window handle it should be possible. That's going to be the next step of research.

For the menus, initially I wanted each Java plugin to have it's menu entry at the top level of the context menu (or menu bar but I don't know how they work yet). Finally each plugin entry appears as sub menu of a general menu, and it might be better after all, to avoid clutter.

 

foo_java_plugin_loader: load java plugins

Reply #4
For the window handle in SWT you can use the variable "handle" from org.eclipse.swt.widgets.Control. Are you looking for something like that?
Also, I'm programming with SWT for the last year and a half. Perhaps I'll be of any help to you

foo_java_plugin_loader: load java plugins

Reply #5
For the window handle in SWT you can use the variable "handle" from org.eclipse.swt.widgets.Control. Are you looking for something like that?
Also, I'm programming with SWT for the last year and a half. Perhaps I'll be of any help to you


I just implemented support for Swing and SWT column ui compatible panels and I must say it works well
For SWT of course I used the handle variable of Control. I'm using  org.eclipse.swt.widgets.Shell as the window and I could make them title and borderless, there's still an entry for the window in task bar. Any idea to not have one ?

A screenshot showing 2 java panels plugins seen as any other column UI plugins:

http://bubbleguuum.free.fr/foo_java_plugin...java_panels.PNG

The small lower left play/stop/pause panel uses Swing. The www browser panel below the playlist uses the browser component of SWT. It displays the discogs release page of the playing song.

foo_java_plugin_loader: load java plugins

Reply #6
there's still an entry for the window in task bar. Any idea to not have one ?

Check this:

Code: [Select]
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.*;

public class MainClass {
    public static void main(String[] args){
        Display display = new Display();
final Shell shell = new Shell(display, SWT.SHELL_TRIM);
shell.setText("main shell");
Shell newShell = new Shell(shell, SWT.SHELL_TRIM);
newShell.setText("child shell");
newShell.pack();
shell.pack();
newShell.open();

newShell.addDisposeListener(new DisposeListener(){
public void widgetDisposed(DisposeEvent e){
if(shell!=null) shell.dispose();
}
});

while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
    }
}

E.g. I'm calling open() on the child shell, not on the parent one

foo_java_plugin_loader: load java plugins

Reply #7
Glad to help. I'm waiting to stick my nose into the development with SWT, though I understood yesterday that I need, first of all, to get myself into the C++ in the SDK.
About the event dispatching. I don't think I can really help you without looking at your bindings code. Please, please release the Java code as opensource  + update it so we can build some panels. Thank you for this great work.
My only guess is that you may want to try to use this construct:

Code: [Select]
Display.getDefault().asyncExec(new Runnable(){
//your code here - threading in SWT
});

foo_java_plugin_loader: load java plugins

Reply #8
Glad to help. I'm waiting to stick my nose into the development with SWT, though I understood yesterday that I need, first of all, to get myself into the C++ in the SDK.
About the event dispatching. I don't think I can really help you without looking at your bindings code. Please, please release the Java code as opensource  + update it so we can build some panels. Thank you for this great work.


Thanks for showing interest in this plugin. I finally fixed my "foobar won't exit" problem when using a SWT component. Had to make the SWT UI live in a different Java Thread.
I'll release a new version supporting panels really soon so you can play with it and I will also release the C++ source once it's stabilized a bit.
It's useful to get the C++ SDK has the Java classes wraps some of it and the docs are in C++ headers.


foo_java_plugin_loader: load java plugins

Reply #10

I'll release a new version supporting panels really soon ...

Great! Thank you



here is the new version, with 2 panel plugins appearing in the Panel section of the columns UI layout:

- "Useless Play Control" uses Swing.

- "WWW Browser" uses SWT and just display the discogs release page of the playing track if it has a %DISCOGS_RELEASE_ID% tag. There's a known problem with this panel: when you add it first it'll display a blank panel. Relaunch foobar and it'll display correctly. SWT doesn't like too much columns UI destroying the window it seems.

I'm curious to see if it runs correclty on other foobar installs without errors. Especially if anybody has lock up s where everything is freezed. And if you can exit foobar without freeze.

Included in the zip all Java source code, if you want the C code, PM me.

foo_java_plugin_loader: load java plugins

Reply #11
Two crash reports:
on PIII, 730Mhz, 256 MB of RAM, XP SP2,JDK 6u1

1. I'm using Foobar without installation. I've prepared a directory with clean unpacked install of 0.9.4.3 + 0.1.3 beta 1 v7 of columnsUI. These are the components:

foo_input_std.dll
foo_java_plugin_loader.dll - latest version
foo_ui_columns.dll

On the first run I've got an error window with this text : "JVM: Could not read Foobar2000 InstallDir registry key". I've successfully worked out the exception by running .reg file as this:
Code: [Select]
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\foobar2000]
"InstallDir"="C:\\progs\\foobar2000Java"

This is the dump:
Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 00B619A9h
Access violation, operation: read, address: 00000000h
Call path:
entry=>initquit::on_init
This is the first crash logged by this instance.
Code bytes (00B619A9h):
00B61969h:  4C 72 0D 8B 44 24 38 50 E8 B2 67 00 00 83 C4 04
00B61979h:  39 B4 24 DC 00 00 00 8B 94 24 C8 00 00 00 89 7C
00B61989h:  24 4C 89 5C 24 48 88 5C 24 38 73 07 8D 94 24 C8
00B61999h:  00 00 00 8B 74 24 14 8B 8E 00 01 00 00 8B 46 50
00B619A9h:  8B 38 68 40 7C B7 00 52 51 8B 8F 40 02 00 00 50
00B619B9h:  FF D1 3B C3 0F 85 DA 00 00 00 8D 94 24 C4 00 00
00B619C9h:  00 52 B9 48 7C B7 00 8D 7C 24 74 E8 B7 2D 00 00
00B619D9h:  83 C4 04 50 BF 44 7C B7 00 8D 74 24 1C C6 84 24
Stack (0012F914h):
0012F8F4h:  0006AC94 7C9C93C0 77F643DD 7C9C93C0
0012F904h:  00000004 00000000 0006A1A0 00000000
0012F914h:  D42B2CAF 00000000 0012FA20 0012FB1C
0012F924h:  00BA39C8 00BA39C8 FFFFFFFF 7C9106EB
0012F934h:  00B67FB5 00BA0000 00000000 00000020
0012F944h:  0012F9D8 0000001F 73616C00 00002073
0012F954h:  00B683AA 00000020 00000000 0000000F
0012F964h:  00000000 0012F9AC 00BA3B00 00000020
0012F974h:  D42B2C1B 00000012 00000000 0000000F
0012F984h:  00000000 0012F9A4 00B6873F 00BA3B80
0012F994h:  00B7802C 00000012 00000012 0012F9D8
0012F9A4h:  00BA3C18 00B63DB6 00BA3B80 0000001F
0012F9B4h:  00000023 0000002F D42B2C9F 0012FB0C
0012F9C4h:  00B750C9 00000005 00B62AEF 00BA39C8
0012F9D4h:  0012FA24 0012FA20 00BA3B80 00000000
0012F9E4h:  00CF0E38 00CF0E38 00000012 0000001F
0012F9F4h:  00250298 00000000 D42B2FB7 0012FB3C
0012FA04h:  0012FBCC 00000000 010101D8 00000004
0012FA14h:  004DEB6C 0012F9D8 004DEDF8 004DEA00
0012FA24h:  7C910570 FFFFFFFF 7C91056D 004935B9
Registers:
EAX: 00000000, EBX: 00000000, ECX: 00000000, EDX: 00BA3B80
ESI: 00BA39C8, EDI: 0000000F, EBP: 0012FA24, ESP: 0012F914
Crash location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h

Loaded modules:
foobar2000                      loaded at 00400000h - 004F3000h
ntdll                            loaded at 7C900000h - 7C9B0000h
kernel32                        loaded at 7C800000h - 7C8F5000h
COMCTL32                        loaded at 773D0000h - 774D3000h
msvcrt                          loaded at 77C10000h - 77C68000h
ADVAPI32                        loaded at 77DD0000h - 77E6B000h
RPCRT4                          loaded at 77E70000h - 77F01000h
GDI32                            loaded at 77F10000h - 77F57000h
USER32                          loaded at 7E410000h - 7E4A0000h
SHLWAPI                          loaded at 77F60000h - 77FD6000h
SHELL32                          loaded at 7C9C0000h - 7D1D5000h
ole32                            loaded at 774E0000h - 7761D000h
shared                          loaded at 10000000h - 10029000h
comdlg32                        loaded at 763B0000h - 763F9000h
LPK                              loaded at 629C0000h - 629C9000h
USP10                            loaded at 74D90000h - 74DFB000h
MSCTF                            loaded at 74720000h - 7476B000h
foo_input_std                    loaded at 00A20000h - 00B33000h
foo_java_plugin_loader          loaded at 00B60000h - 00B84000h
UxTheme                          loaded at 5AD70000h - 5ADA8000h
foo_ui_columns                  loaded at 00C40000h - 00CD7000h
imagehlp                        loaded at 76C90000h - 76CB8000h
DBGHELP                          loaded at 59A60000h - 59B01000h
VERSION                          loaded at 77C00000h - 77C08000h

Stack dump analysis:
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 00B67FB5h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B683AAh, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B6873Fh, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B7802Ch, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B63DB6h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B750C9h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B62AEFh, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 004DEB6Ch, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004DEDF8h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004DEA00h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C910570h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000133h)
Address: 7C91056Dh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000130h)
Address: 004935B9h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00497110h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004935D8h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0043D4CAh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C910570h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000133h)
Address: 004BE0ACh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 10002D87h, location: "shared", loaded at 10000000h - 10029000h
Symbol: "uPrintCrashInfo_SetDumpPath" (+000000A7h)
Address: 004BE0ACh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00B672C4h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 0040A6DFh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0040A6ECh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004A6366h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00470DF8h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0044BC61h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00B752FEh, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B67245h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 0042FA29h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC40Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00B7D1B0h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 0042F9EBh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004A67ABh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00430868h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C910732h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000015Eh)
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 7C9105D4h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000000h)
Address: 7C910738h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000164h)
Address: 7C910732h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000015Eh)
Address: 7C910732h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000015Eh)
Address: 7C911538h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "wcsncpy" (+00000AA9h)
Address: 7C911596h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "wcsncpy" (+00000B07h)
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 004E4198h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C91056Dh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000130h)
Address: 1000C021h, location: "shared", loaded at 10000000h - 10029000h
Address: 004E3E68h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C9106F0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000011Ch)
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C9106F0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000011Ch)
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 00491E58h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E4218h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00447AE7h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0043D4DDh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00407E27h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0049812Dh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004C0540h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 10002D87h, location: "shared", loaded at 10000000h - 10029000h
Symbol: "uPrintCrashInfo_SetDumpPath" (+000000A7h)
Address: 004C0540h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004AF4F4h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004C0540h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00430B6Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E0928h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004973CAh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004936FCh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004936F6h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004B49E0h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004B33D0h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E4210h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00497110h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004AF8E8h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00496284h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00497110h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C816FD7h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "RegisterWaitForInputIdle" (+00000049h)
Address: 7C839AA8h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "ValidateLocale" (+000002B0h)
Address: 7C816FE0h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "RegisterWaitForInputIdle" (+00000052h)
Address: 004962EDh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E0049h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004F0044h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004B0063h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00410072h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E0049h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004F0044h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004D002Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0044002Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0044002Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00410072h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E0049h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004F0044h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0044002Eh, location: "foobar2000", loaded at 00400000h - 004F3000h

Version info:
foobar2000 v0.9.4.3
UNICODE

Additional info:
Standard Input Array 1.0  (foo_input_std)
WMA Decoder 1.1  (foo_input_std)
FLAC Decoder 1.1.0  (foo_input_std)
Java plugin loader 0.11  (foo_java_plugin_loader)
Columns UI 0.1.3 beta 1v7  (foo_ui_columns)
foobar2000 core 0.9.4.3  (Core)


Is there something we can do to keep the portability of the program, e.g. without installation and without per-user settings?

2. I've run Foobar and on each right-click on playlist I've got this:
Code: [Select]
Illegal operation:
Code: C0000005h, flags: 00000000h, address: 6D892133h
Access violation, operation: read, address: 00000000h
Call path:
entry=>app_mainloop
This is the first crash logged by this instance.
Code bytes (6D892133h):
6D8920F3h:  85 C0 89 74 24 10 C7 44 24 14 00 00 00 00 74 09
6D892103h:  8D 4C 24 10 E8 E4 3C 08 00 A1 14 6F 9C 6D 50 FF
6D892113h:  15 40 51 98 6D 8B B0 8C 00 00 00 8B 4E 04 8B 46
6D892123h:  0C 8B 56 08 89 4C 24 24 8B 4C 24 38 89 44 24 2C
6D892133h:  8B 01 50 89 54 24 2C E8 01 00 FF FF 83 C4 04 8B
6D892143h:  F8 8D 50 01 8A 08 40 84 C9 75 F9 2B C2 8D 58 01
6D892153h:  53 E8 37 5E 07 00 8B E8 83 C4 04 85 ED 75 16 68
6D892163h:  74 22 9A 6D 53 6A 17 68 80 56 98 6D E8 EC 71 FB
Stack (0012F20Ch):
0012F1ECh:  0006AFB0 7C9C93C0 77F643DD 7C9C93C0
0012F1FCh:  00000004 00000000 0006A4BC 00000000
0012F20Ch:  050A04D8 00000000 0012F30C 00BA6990
0012F21Ch:  00C36400 00C353B0 0000012A 6D9ADBC8
0012F22Ch:  00C364E8 00C357E8 02E375F4 00C35BDC
0012F23Ch:  00B66D38 00C36400 00000000 00000000
0012F24Ch:  050A04D8 00000000 004112C7 0012F2BC
0012F25Ch:  0012F2D8 050A04E8 050A0548 050A04D8
0012F26Ch:  00000000 00BA3C78 0012F204 0012F224
0012F27Ch:  0012F269 00000001 00BA6988 00BA0168
0012F28Ch:  00000000 00000000 00BA6988 00000018
0012F29Ch:  00BA6990 00000004 00BA0178 00000018
0012F2ACh:  0000F3C4 050A0548 0012F0AC 00000000
0012F2BCh:  004BC438 00000000 00000000 00000000
0012F2CCh:  00000000 00B67FB5 00BA0000 00000000
0012F2DCh:  050A04E8 00000002 00BA3C78 00BA3C78
0012F2ECh:  050A04D8 00B683AA 0000000C 00000000
0012F2FCh:  0012F268 0012F3B8 004AB8BD 00000002
0012F30Ch:  0012F3C4 0041149E 0012F360 0012F3E4
0012F31Ch:  00BA6990 050A04D8 050A0B20 00000002
Registers:
EAX: 00C35BDC, EBX: 00BA6990, ECX: 00000000, EDX: 00C357F0
ESI: 00C35BF0, EDI: 050A04D8, EBP: 0012F30C, ESP: 0012F20C
Crash location: "jvm", loaded at 6D7C0000h - 6DA07000h
Symbol: "JNI_GetCreatedJavaVMs" (+0000D7A3h)

Loaded modules:
foobar2000                      loaded at 00400000h - 004F3000h
ntdll                            loaded at 7C900000h - 7C9B0000h
kernel32                        loaded at 7C800000h - 7C8F5000h
COMCTL32                        loaded at 773D0000h - 774D3000h
msvcrt                          loaded at 77C10000h - 77C68000h
ADVAPI32                        loaded at 77DD0000h - 77E6B000h
RPCRT4                          loaded at 77E70000h - 77F01000h
GDI32                            loaded at 77F10000h - 77F57000h
USER32                          loaded at 7E410000h - 7E4A0000h
SHLWAPI                          loaded at 77F60000h - 77FD6000h
SHELL32                          loaded at 7C9C0000h - 7D1D5000h
ole32                            loaded at 774E0000h - 7761D000h
shared                          loaded at 10000000h - 10029000h
comdlg32                        loaded at 763B0000h - 763F9000h
LPK                              loaded at 629C0000h - 629C9000h
USP10                            loaded at 74D90000h - 74DFB000h
MSCTF                            loaded at 74720000h - 7476B000h
foo_input_std                    loaded at 00A20000h - 00B33000h
foo_java_plugin_loader          loaded at 00B60000h - 00B84000h
jvm                              loaded at 6D7C0000h - 6DA07000h
WINMM                            loaded at 76B40000h - 76B6D000h
MSVCR71                          loaded at 7C340000h - 7C396000h
hpi                              loaded at 6D310000h - 6D318000h
PSAPI                            loaded at 76BF0000h - 76BFB000h
verify                          loaded at 6D770000h - 6D77C000h
java                            loaded at 6D3B0000h - 6D3CF000h
zip                              loaded at 6D7B0000h - 6D7BF000h
swt-win32-3236                  loaded at 038D0000h - 03923000h
OLEAUT32                        loaded at 77120000h - 771AC000h
IMM32                            loaded at 76390000h - 763AD000h
WININET                          loaded at 771B0000h - 77256000h
CRYPT32                          loaded at 77A80000h - 77B14000h
MSASN1                          loaded at 77B20000h - 77B32000h
MSVFW32                          loaded at 75A70000h - 75A91000h
fb2k_java_api                    loaded at 03950000h - 0398A000h
awt                              loaded at 6D000000h - 6D1C3000h
WINSPOOL                        loaded at 73000000h - 73026000h
ddraw                            loaded at 73760000h - 737A9000h
DCIMAN32                        loaded at 73BC0000h - 73BC6000h
fontmanager                      loaded at 6D2B0000h - 6D303000h
foo_ui_columns                  loaded at 05000000h - 05097000h
uxtheme                          loaded at 5AD70000h - 5ADA8000h
net                              loaded at 6D570000h - 6D583000h
WS2_32                          loaded at 71AB0000h - 71AC7000h
WS2HELP                          loaded at 71AA0000h - 71AA8000h
nio                              loaded at 6D590000h - 6D599000h
xpsp2res                        loaded at 20000000h - 202C5000h
imagehlp                        loaded at 76C90000h - 76CB8000h
DBGHELP                          loaded at 59A60000h - 59B01000h
VERSION                          loaded at 77C00000h - 77C08000h

Stack dump analysis:
Address: 6D9ADBC8h, location: "jvm", loaded at 6D7C0000h - 6DA07000h
Symbol: "HighResTimeSampler::`vftable'" (+00000080h)
Address: 00B66D38h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 004112C7h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00B67FB5h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 00B683AAh, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 004AB8BDh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0041149Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 6D7D7F35h, location: "jvm", loaded at 6D7C0000h - 6DA07000h
Symbol: "JVM_EnqueueOperation" (+000000A5h)
Address: 6D88AAF6h, location: "jvm", loaded at 6D7C0000h - 6DA07000h
Symbol: "JNI_GetCreatedJavaVMs" (+00006166h)
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00B666EAh, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 6D983FFAh, location: "jvm", loaded at 6D7C0000h - 6DA07000h
Symbol: "JVM_FindSignal" (+000CCEEAh)
Address: 6D9A96C8h, location: "jvm", loaded at 6D7C0000h - 6DA07000h
Symbol: "MaskFillerForNative::`vftable'" (+00000C6Ch)
Address: 004AB8BDh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00411737h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00447AE7h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004117F9h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0042B342h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00415E8Dh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004339F9h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00412282h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00410B85h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0041175Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004ACF9Fh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00411853h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0042B354h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00415E8Dh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004339F9h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00412282h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0041175Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004ACF9Fh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00411853h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00403ED4h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004578D3h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0041175Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004ACF9Fh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00411BDBh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00B7D1A0h, location: "foo_java_plugin_loader", loaded at 00B60000h - 00B84000h
Address: 004C3B90h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00403EC5h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004AE072h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00410F9Dh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00410FB4h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004A6E09h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0501CEBBh, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 004DF178h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C91056Dh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000130h)
Address: 05006748h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E418816h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000014Fh)
Address: 7E41885Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000193h)
Address: 7E41882Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000163h)
Address: 0505F34Eh, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 004F034Dh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004DF178h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E4188D1h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+0000002Bh)
Address: 7E4188DAh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+00000034h)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E41B4CBh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefWindowProcW" (+0000018Fh)
Address: 05006748h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E41B50Ch, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefWindowProcW" (+000001D0h)
Address: 7E41B51Ch, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefWindowProcW" (+000001E0h)
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E418816h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000014Fh)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 05018996h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E418830h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000169h)
Address: 7E41D17Fh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "EnumDisplayMonitors" (+0000021Ch)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E4184FCh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E4185A4h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Address: 7E41B3F9h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefWindowProcW" (+000000BDh)
Address: 7E41B393h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefWindowProcW" (+00000057h)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E41B3B0h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DefWindowProcW" (+00000074h)
Address: 0501E143h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E41F896h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "CallNextHookEx" (+0000003Bh)
Address: 74730E6Ch, location: "MSCTF", loaded at 74720000h - 7476B000h
Symbol: "TF_UninitSystem" (+00000A03h)
Address: 74730E71h, location: "MSCTF", loaded at 74720000h - 7476B000h
Symbol: "TF_UninitSystem" (+00000A08h)
Address: 0505F34Eh, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7475E548h, location: "MSCTF", loaded at 74720000h - 7476B000h
Address: 74730E78h, location: "MSCTF", loaded at 74720000h - 7476B000h
Symbol: "TF_UninitSystem" (+00000A0Fh)
Address: 74730E71h, location: "MSCTF", loaded at 74720000h - 7476B000h
Symbol: "TF_UninitSystem" (+00000A08h)
Address: 7E41F84Ah, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "EnableMenuItem" (+000000C3h)
Address: 7E41F7F6h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "EnableMenuItem" (+0000006Fh)
Address: 7E41F805h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "EnableMenuItem" (+0000007Eh)
Address: 0505F34Eh, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E41F805h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "EnableMenuItem" (+0000007Eh)
Address: 7E418B26h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowThreadProcessId" (+000000A6h)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E4188D1h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+0000002Bh)
Address: 7E4188DAh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+00000034h)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 05006748h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 05024F85h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E418734h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000006Dh)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E418816h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+0000014Fh)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E418830h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetDC" (+00000169h)
Address: 7E4189CDh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+00000127h)
Address: 050065D0h, location: "foo_ui_columns", loaded at 05000000h - 05097000h
Address: 7E41DAEAh, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DestroyWindow" (+00000000h)
Address: 7E42D950h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "IsDialogMessageW" (+0000008Eh)
Address: 7E440457h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DeregisterShellHookWindow" (+000001CFh)
Address: 7E4189F0h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "GetWindowLongW" (+0000014Ah)
Address: 7E418A10h, location: "USER32", loaded at 7E410000h - 7E4A0000h
Symbol: "DispatchMessageW" (+0000000Fh)
Address: 0042FE21h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 10002DD2h, location: "shared", loaded at 10000000h - 10029000h
Symbol: "uCallStackTracker::uCallStackTracker" (+00000032h)
Address: 004C0530h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0041DAEAh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00430967h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004C07D0h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004BC438h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C910732h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000015Eh)
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004C70E0h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C910732h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000015Eh)
Address: 7C910732h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000015Eh)
Address: 7C911538h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "wcsncpy" (+00000AA9h)
Address: 7C911596h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "wcsncpy" (+00000B07h)
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 004E4198h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C91056Dh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlFreeHeap" (+00000130h)
Address: 1000C021h, location: "shared", loaded at 10000000h - 10029000h
Address: 004E3E68h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C9106F0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000011Ch)
Address: 7C90EE18h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "strchr" (+00000117h)
Address: 7C9106F0h, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+0000011Ch)
Address: 7C9106EBh, location: "ntdll", loaded at 7C900000h - 7C9B0000h
Symbol: "RtlAllocateHeap" (+00000117h)
Address: 00491E58h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E4218h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00447AE7h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0043D4DDh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00407E27h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 0049812Dh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004C0540h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 10002D87h, location: "shared", loaded at 10000000h - 10029000h
Symbol: "uPrintCrashInfo_SetDumpPath" (+000000A7h)
Address: 004C0540h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004AF4F4h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004C0540h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00430B6Eh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E0928h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004973CAh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004936FCh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004936F6h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004B49E0h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004B33D0h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E4210h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00497110h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004AF8E8h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00496284h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00400000h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 00497110h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 7C816FD7h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "RegisterWaitForInputIdle" (+00000049h)
Address: 7C839AA8h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "ValidateLocale" (+000002B0h)
Address: 7C816FE0h, location: "kernel32", loaded at 7C800000h - 7C8F5000h
Symbol: "RegisterWaitForInputIdle" (+00000052h)
Address: 004962EDh, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004E0049h, location: "foobar2000", loaded at 00400000h - 004F3000h
Address: 004F0044h, location: "foobar2000", loaded at 00400000h - 004F3000h

Version info:
foobar2000 v0.9.4.3
UNICODE

Additional info:
FLAC Decoder 1.1.0  (foo_input_std)
Java plugin loader 0.11  (foo_java_plugin_loader)
foobar2000 core 0.9.4.3  (Core)
Columns UI 0.1.3 beta 1v7  (foo_ui_columns)
Standard Input Array 1.0  (foo_input_std)
WMA Decoder 1.1  (foo_input_std)


Tried this with some more plugins from the standard Foobar installation + latest alpha of columnsUI, got dumps with another addresses.
Have not got the time to look at the code, sorry.


Update
Hm-m, I've added the two sample panels, restarted Foobar two or three times and now the right-click works as it should, including the Java plugins.  Then I've removed the panels, restarted the prog and crashed once again on right-click.
Apropos working and closing the program, it does NOT freezes as far as I can tell for now

foo_java_plugin_loader: load java plugins

Reply #12
Thnaks for the report, this is valuable

Two crash reports:
on PIII, 730Mhz, 256 MB of RAM, XP SP2,JDK 6u1

1. I'm using Foobar without installation. I've prepared a directory with clean unpacked install of 0.9.4.3 + 0.1.3 beta 1 v7 of columnsUI. These are the components:

foo_input_std.dll
foo_java_plugin_loader.dll - latest version
foo_ui_columns.dll

On the first run I've got an error window with this text : "JVM: Could not read Foobar2000 InstallDir registry key".
Is there something we can do to keep the portability of the program, e.g. without installation and without per-user settings?


I need to know foobar's component directory very early before the corresponding API to get it has been initialized, so I'm reading that in the registry. There's probably a better solution, I'll have to think about it

Quote
2. I've run Foobar and on each right-click on playlist I've got this:
Tried this with some more plugins from the standard Foobar installation + latest alpha of columnsUI, got dumps with another addresses.
Hm-m, I've added the two sample panels, restarted Foobar two or three times and now the right-click works as it should, including the Java plugins.  Then I've removed the panels, restarted the prog and crashed once again on right-click.
Apropos working and closing the program, it does NOT freezes as far as I can tell for now


I never had crashes on the context menu but I'll have to try from a fresh install and with Java 6 (using 5 here). You could try to remove or rename each java plugin JAR (test2.jar, test.jar, browser.jar) to see which one make the menu crash

No problems with the 2 panels once they were displayed ?

foo_java_plugin_loader: load java plugins

Reply #13
test2 is the plugin that is responsible of menu crash. With the two panels added + using tagging plugin for now all is working well. I will check this once again + more than likely will look at the code as I return from work.

About the plugins component directory - perhaps the manual checking from Java will help some way. Something like System.getProprety("user.dir") as the base.

foo_java_plugin_loader: load java plugins

Reply #14
test2 is the plugin that is responsible of menu crash. With the two panels added + using tagging plugin for now all is working well. I will check this once again + more than likely will look at the code as I return from work.


Thanks found the cause of the crash in test2 - a silly last minute modification

foo_java_plugin_loader: load java plugins

Reply #15
Please also check whether the test2 does not crash after your fix, when its panel is not used in the layout and you are going to "Keyboard Shortcuts" preferences. Also, for my understanding, it will be great to give a way to add such shortcuts to the Java plugins via the standard config window.

Again, I'm sure that you do great and valuable work. Thank you very much

foo_java_plugin_loader: load java plugins

Reply #16
I need to know foobar's component directory very early before the corresponding API to get it has been initialized, so I'm reading that in the registry. There's probably a better solution, I'll have to think about it

I've used the following code in one of my more experimental components to retrieve the directory in which foobar2000 is installed. It retrieves the path of the main module of the current process - normally this is foobar2000.exe - and strips the filename part.
Code: [Select]
void uGetInstallPath(pfc::string_base & p_out)
{
    pfc::string8 path;
    uGetModuleFileName(NULL, path);
    p_out.set_string(path, path.scan_filename());
}

Note that placing component DLLs in the "components" subdirectory is just a convention, foobar2000 scans its installation directory and all its subdirectories recursively for component DLLs. To get the path to your own DLL this early in the component loading process, you will need to save your module handle in DllMain so you can use it with GetModuleFilename().

foo_java_plugin_loader: load java plugins

Reply #17
I've used the following code in one of my more experimental components to retrieve the directory in which foobar2000 is installed. It retrieves the path of the main module of the current process - normally this is foobar2000.exe - and strips the filename part.


Thanks it works great, the HINSTANCE is even availbale since it's the first thing assigned in foobar2000_get_interface().

foo_java_plugin_loader: load java plugins

Reply #18
Hi!
Is the developement of this plugin still in progress? Is there a chance that someday all apis will be wrapped?

foo_java_plugin_loader: load java plugins

Reply #19
Hi!
Is the developement of this plugin still in progress? Is there a chance that someday all apis will be wrapped?



I've abandonned it since wrapping all the API is quite a bit of work even if it's semi automatic using SWIG for code generation. I would have continued it if I was writing a real java component making use of the bindings, but that did not happen. IIRC I've just bound the play notifications, the play control (stop/play/pause, etc) and some of the tagging API, and a way to create UI panels written in Java using either Swing (works well) or SWT (buggy because of weird main loop interaction problems)

I'll probably release the source code of the C++ plugin that loads Java plugins as it is of no use sitting in my hard drive.

What specific Java plugin would you want to write ? I may wrap the APIs you need.

foo_java_plugin_loader: load java plugins

Reply #20
Any update on a source release?

I actually started this same process last year, saw your progress and abandoned my effort since you were further. Kudos to all you've done. I'm hoping to utilize JOGL to add some fancy vis plugins.

I've attempted to use SWIG in the past at work to wrap up some native IO libraries and found the generated code sometimes cumbersom and not exactly what I wanted. Most times I ended up wrapping only what I needed. Hopefully it's working out for you.

foo_java_plugin_loader: load java plugins

Reply #21
I'll release the source ASAP so you can have a look and extend it if you want. If you want to just
do a Columns UI panel for visualizations there will be not much to add.
Learning SWIG is quite a commitment as it is a bit complex, but worth it IMHO instead of doing things
manually.

foo_java_plugin_loader: load java plugins

Reply #22
Here's the source, for the curious or the hacker:

http://bubbleguuum.free.fr/foo_java_plugin..._loader_src.zip

There's some instructions on how to build it in the README inside.
It won't be super easy to extend if you don't have some knowledge of SWIG. Even with good knowledge of SWIG it can be quite tricky.
I left the possibility to create SWT columns ui panels even if they are not refreshed any more after a while (at least for the example provided, the www browser).

foo_java_plugin_loader: load java plugins

Reply #23
cheers! Let the tinkering begin!