New trying to debug missing menubar

Joseph Garvin k04jg02 at kzoo.edu
Wed Dec 21 02:33:53 CST 2005


There's an old Windows 3.1 app I'm trying to use under wine, but it's 
menubar is missing. It was used for in house development for a really 
old game, but the programmer has asked me not to redistribute it so I 
can't provide a link/download. The application otherwise looks and acts 
exactly as it should -- but the File/About/etc. menubar is missing and 
thus the ability to use any of those options (I don't think the app has 
any accelerators).

Seeing as this is such a "simple" bug (watch me eat my words) I thought 
it'd be a good chance to try some wine hacking. So I read the wine 
developer guide and tried my best. But my unfamiliarity with the Windows 
API / Wine has me stuck :P

I've included the results of me running with WINEDEBUG=+menu below. The 
only thing that sticks out to me is this:

warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0

Which occurs multiple times. Looking at dlls/user/menu.c (function 
starts on line 101), it looks like USER_HEAP_LIN_ADDR is returning a 0 
pointer which causes the warning. Someone in #winehq said 
USER_HEAP_LIN_ADDR is for 16<->32 bit conversion because 16bit apps use 
segment:offset to address memory (I'm still not totally sure how a 
segment differs from a memory address) while 32bit apps use flat 
addresses. USER_HEAP_LIN_ADDR itself looks like a very magical macro 
where to look based on it.

strings informs me it's a Borland C++ 1991 app, if that's important.

When I did a +relay all that showed up between the  warn:menu's was 
calls to ENABLEMENUITEM.

Hints for a newb? :)


trace:menu:CreateMenu return 0x50
trace:menu:MENU_GetSysMenu hWnd 0x10022 (hMenu 0x50)
trace:menu:LoadMenuIndirectW 0x7f9cea54, ver 0
trace:menu:CreateMenu return 0x94
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f120, str 
L"&Restore"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9cea5c
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf120, 
Text=L"&Restore" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f010, str 
L"&Move"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9cea72
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf010, 
Text=L"&Move" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f000, str 
L"&Size"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9cea82
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf000, 
Text=L"&Size" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f020, str 
L"Mi&nimize"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9cea92
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf020, 
Text=L"Mi&nimize" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f030, str 
L"Ma&ximize"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9ceaaa
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf030, 
Text=L"Ma&ximize" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id 0000, str 
(nil) (not a string)
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=(nil)
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0x0, 
Type=sep }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f060, str 
L"&Close\tAlt-F4"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9ceac8
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf060, 
Text=L"&Close\tAlt-F4" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id 0000, str 
(nil) (not a string)
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=(nil)
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0x0, 
Type=sep }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f130, str 
L"&Switch to ...\tCtrl-Esc"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9ceaee
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf130, 
Text=L"&Switch to ...\tCtrl-Esc" }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id 0000, str 
(nil) (not a string)
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=(nil)
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0x0, 
Type=sep }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id f141, str 
L"&About WINE ..."
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=0x7f9ceb28
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf141, 
Text=L"&About WINE ..." }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000400, id 0000, str 
(nil) (not a string)
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=400 str=(nil)
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0x0, 
Type=sep }
trace:menu:InsertMenuW hMenu 0x94, pos -1, flags 00000480, id f142, str 
L"&Put 'Debug mark' in debug log"
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=480 str=0x7f9ceb52
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0xf142, 
Text=L"&Put 'Debug mark' in debug log" }
trace:menu:SetMenuDefaultItem (0x94,61536,0)
trace:menu:MENU_CopySysPopup returning 0x94.
trace:menu:InsertMenuW hMenu 0x50, pos -1, flags 00002410, id 0094, str 
(nil) (not a string)
trace:menu:do_debug_print_menuitem MENU_SetItemData from:  { ID=0x0, 
Text=Null }
trace:menu:MENU_SetItemData flags=2410 str=(nil)
trace:menu:do_debug_print_menuitem MENU_SetItemData to  :  { ID=0x94, 
Sub=0x94, Type=sep,pop,rorder }
trace:menu:MENU_GetSysMenu hMenu=0x50 (hPopup 0x94)
trace:menu:GetMenu for 0x10022 returning (nil)
trace:menu:GetMenu for 0x10022 returning (nil)
trace:menu:GetMenu for 0x10022 returning (nil)
trace:menu:EnableMenuItem ((nil), 00ca, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cb, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00c9, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cf, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00d1, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cc, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cd, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00ce, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00d0, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 012e, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 012d, 0001) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:GetMenu for 0x10026 returning (nil)
trace:menu:GetMenu for 0x10026 returning (nil)
trace:menu:GetMenu for 0x10022 returning (nil)
trace:menu:GetMenu for 0x10022 returning (nil)
trace:menu:GetMenu for 0x10022 returning (nil)
trace:menu:EnableMenuItem ((nil), 00ca, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cb, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00c9, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cf, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00d1, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cc, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00cd, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00ce, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:EnableMenuItem ((nil), 00d0, 0000) !
warn:menu:MENU_GetMenu invalid menu handle=(nil), ptr=(nil), magic=0
trace:menu:GetMenuState (menu=0x94, id=f060, flags=0000);
trace:menu:do_debug_print_menuitem   item:  { ID=0xf060, State=default, 
Text=L"&Close\tAlt-F4" }
trace:menu:GetMenuState (menu=0x94, id=f060, flags=0000);
trace:menu:do_debug_print_menuitem   item:  { ID=0xf060, State=default, 
Text=L"&Close\tAlt-F4" }
trace:menu:DestroyMenu (0x50)
trace:menu:DestroyMenu (0x94)




More information about the wine-devel mailing list