All,
In all likeyhood the crash is due to my own code - but there are couple of
things that make me wonder if it could be Win32-GUI. The crash happens
relatively rarely, and I've yet to produce a repeatable test case - so it's
not really worth me explaining what I'm doing - other than I'm building
dynamic windows/controls:)
In almost all cases, the crash happens within DoEvent_Paint - see a tracing
below. The one really interesting bit, is sometimes - just before a crash -
the following code dies:
$line->[2]=$mw->AddCombobox(
-name => 'combo',
-dropdownlist => 1,
-left => 100+8,
-top =>$top,
-width => $sliderwidth-16,
-height => 100,
-onChange => \&__Change,
-onDropDown => \&__DropDown,
-onCloseUp => \&__CloseUp,
);
die 'no parent' unless $line->[2]->GetParent;
Now, how could this Combobox be created without GetParent returning
something?
Any thoughts?
Cheers,
jez.
perl.exe caused an Access Violation at location 280651d9 in module
perl58.dll Reading from location 50272c39.
Registers:
eax=50272c31 ebx=0b3b2f1c ecx=000000ff edx=00000500 esi=0b3b2f1c
edi=002343ac
eip=280651d9 esp=0140f81c ebp=0140f828 iopl=0 nv up ei pl nz na pe
nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000
efl=00000202
Call stack:
280651D9 perl58.dll:280651D9 Perl_sv_setsv_flags
2803E3AE perl58.dll:2803E3AE Perl_sv_compile_2op
280602FE perl58.dll:280602FE Perl_runops_standard
233B7816 GUI.dll:233B7816 DoEvent_Paint(interpreter*,
tagPERLWIN32GUI_USERDATA*) GUI_Events.cpp:935
int32 DoEvent_Paint(interpreter*, tagPERLWIN32GUI_USERDATA*)(
PerlInterpreter * my_perl = &(indirect),
LPPERLWIN32GUI_USERDATA perlud = &(indirect)
)
....
PUTBACK;
count = call_sv(*event, G_EVAL|G_ARRAY);
SPAGAIN;
if(!ProcessEventError(NOTXSCALL "Paint", &PerlResult)) {
if(count > 0) PerlResult = POPi;
....
23472A45 GUI.dll:23472A45 Window_onEvent(interpreter*,
tagPERLWIN32GUI_USERDATA*, unsigned, unsigned, long) Window.xs:265
int32 Window_onEvent(interpreter*, tagPERLWIN32GUI_USERDATA*, unsigned,
unsigned, long)(
PerlInterpreter * my_perl = &(indirect),
LPPERLWIN32GUI_USERDATA perlud = &(indirect),
UINT uMsg = 15,
WPARAM wParam = 0,
LPARAM lParam = 0
)
....
* (@)APPLIES_TO:Window, DialogBox, MDIFrame
*/
PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL8,
"InitMenu",
PERLWIN32GUI_ARGTYPE_INT, (int) wParam,
-1 );
....
233BFD2F GUI.dll:233BFD2F WindowMsgLoop(HWND__*, unsigned, unsigned, long)
GUI_MessageLoops.cpp:642
LRESULT WindowMsgLoop(HWND__*, unsigned, unsigned, long)(
HWND hwnd = &(indirect),
UINT uMsg = 15,
WPARAM wParam = 0,
LPARAM lParam = 0
)
....
{ HV *dropfiles_stash = gv_stashpv("Win32::GUI::DropFiles", 0);
if(dropfiles_stash) { /* Win32::GUI::DropFiles is available */
PerlResult = DoEvent(NOTXSCALL perlud,
PERLWIN32GUI_NEM_DROPFILE, "DropFiles",
PERLWIN32GUI_ARGTYPE_SV,
CreateObjectWithHandle(NOTXSCALL "Win32::GUI::DropFiles", (HWND)wParam),
-1);
....
77D48734 USER32.dll:77D48734 GetDC
77D48816 USER32.dll:77D48816 GetDC
77D4B4C0 USER32.dll:77D4B4C0 DefWindowProcW
77D4B50C USER32.dll:77D4B50C DefWindowProcW
7C90EAE3 ntdll.dll:7C90EAE3 KiUserCallbackDispatcher
77D496C7 USER32.dll:77D496C7 DispatchMessageA
23394F07 GUI.dll:23394F07 XS_Win32__GUI_Dialog(interpreter*, cv*)
GUI.xs:1089
void XS_Win32__GUI_Dialog(interpreter*, cv*)(
PerlInterpreter * my_perl = &(indirect),
CV * cv = &(indirect)
)
....
){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
....
28041DCB perl58.dll:28041DCB Perl_sv_compile_2op
280602FE perl58.dll:280602FE Perl_runops_standard
2808C804 perl58.dll:2808C804 RunPerl
00401012 perl.exe:00401012
7C816D4F kernel32.dll:7C816D4F RegisterWaitForInputIdle