WM_MEASUREITEM causes access violation, if item is at 64bit location (pointer is truncated to 32 bit)
- Lazarus/FPC Version: 2.3
- Operating System: Win 64
procedure TWindowProcHelper.DoMsgMeasureItem;
begin
case PMeasureItemStruct(LParam)^.CtlType of
ODT_MENU:
...
else
if WParam <> 0 then
begin
lWinControl := TWinControl(WParam);
msdn says: wParam contains the CtlID (Probably/Apparently the LCL/WS stores the address of the wincontrol?)
In my case this was caused by "Open Loaded package", filter down to one item, double click the item.
The issue is caused by frame 5 TWINDOWPROCHELPER.DoMsgMeasureItem
0 TMethodList.Add(TMethodList($0000000101146778), TMethod ($00000001001DE7B0; $00000000013FBBA8)) at B:\lazarus_main\components\lazutils\lazmethodlist.pas:272 1 TMethodList.Add(TMethodList($0000000101146778), TMethod ($00000001001DE7B0; $00000000013FBBA8), True) at B:\lazarus_main\components\lazutils\lazmethodlist.pas:284 2 TControl.AddHandler(TControl($00000000D525F490), chtOnBeforeDestruction, TMethod ($00000001001DE7B0; $00000000013FBBA8), False) at B:\lazarus_main\lcl\include\control.inc:2006 3 TControl.AddHandlerOnBeforeDestruction(TControl($00000000D525F490), TNotifyEvent ($00000001001DE7B0 = TWindProcNotificationReceiver.ReceiveDestroyNotify: TNotifyEvent; TObject($00000000013FBBA8)), False) at B:\lazarus_main\lcl\include\control.inc:5019 4 TWINDOWPROCHELPER.SetlWinControl(TWindowProcHelper (19925054; 44; 3576034448; 20955304; TMessage (0; 0; 0; 0; 0; 0; TDWordFiller (({4 elements})); 0; 0; TDWordFiller (({4 elements})); 0; 0; TDWordFiller (({4 elements}))); $00000000013FBBC8; TWinControl($00000000D525F490); True; False; $00000001D69B3390; TDoubleBuffer (0; 0; 0; 0); 0; 0; TLMPaint (0; 0; 0; nil; 0); False; 0; TLMScroll (0; 0; 0; 0; 0; 0; 0; 0); TLMKey (0; 0; 0; 0; 0; 0; 0); TLMKey (0; 0; 0; 0; 0; 0; 0); TLMMouse (0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMContextMenu (0; 0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMMouse (0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMMouseEvent (0; 0; 0; 0; 0; 0; 0; 0; 0; nil; []); TLMMove (0; 0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMNotify (0; 0; 0; nil; 0); TDrawListItemStruct (0; TRect (0; 0; 0; 0; TPoint (0; 0); TPoint (0; 0); TArray4IntegerType({4 elements})); 0; []); $00000000013FC0A8; TWinControl($00000000D525F490)), TWinControl($00000000D525F490)) at B:\lazarus_main\lcl\interfaces\win32\win32callback.inc:537 5 TWINDOWPROCHELPER.DoMsgMeasureItem(TWindowProcHelper (19925054; 44; 3576034448; 20955304; TMessage (0; 0; 0; 0; 0; 0; TDWordFiller (({4 elements})); 0; 0; TDWordFiller (({4 elements})); 0; 0; TDWordFiller (({4 elements}))); $00000000013FBBC8; TWinControl($00000000D525F490); True; False; $00000001D69B3390; TDoubleBuffer (0; 0; 0; 0); 0; 0; TLMPaint (0; 0; 0; nil; 0); False; 0; TLMScroll (0; 0; 0; 0; 0; 0; 0; 0); TLMKey (0; 0; 0; 0; 0; 0; 0); TLMKey (0; 0; 0; 0; 0; 0; 0); TLMMouse (0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMContextMenu (0; 0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMMouse (0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMMouseEvent (0; 0; 0; 0; 0; 0; 0; 0; 0; nil; []); TLMMove (0; 0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMNotify (0; 0; 0; nil; 0); TDrawListItemStruct (0; TRect (0; 0; 0; 0; TPoint (0; 0); TPoint (0; 0); TArray4IntegerType({4 elements})); 0; []); $00000000013FC0A8; TWinControl($00000000D525F490))) at B:\lazarus_main\lcl\interfaces\win32\win32callback.inc:1854 6 TWINDOWPROCHELPER.DoWindowProc(TWindowProcHelper (19925054; 44; 3576034448; 20955304; TMessage (0; 0; 0; 0; 0; 0; TDWordFiller (({4 elements})); 0; 0; TDWordFiller (({4 elements})); 0; 0; TDWordFiller (({4 elements}))); $00000000013FBBC8; TWinControl($00000000D525F490); True; False; $00000001D69B3390; TDoubleBuffer (0; 0; 0; 0); 0; 0; TLMPaint (0; 0; 0; nil; 0); False; 0; TLMScroll (0; 0; 0; 0; 0; 0; 0; 0); TLMKey (0; 0; 0; 0; 0; 0; 0); TLMKey (0; 0; 0; 0; 0; 0; 0); TLMMouse (0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMContextMenu (0; 0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMMouse (0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMMouseEvent (0; 0; 0; 0; 0; 0; 0; 0; 0; nil; []); TLMMove (0; 0; 0; 0; 0; TSmallPoint (0; 0); 0; 0); TLMNotify (0; 0; 0; nil; 0); TDrawListItemStruct (0; TRect (0; 0; 0; 0; TPoint (0; 0); TPoint (0; 0); TArray4IntegerType({4 elements})); 0; []); $00000000013FC0A8; TWinControl($00000000D525F490))) at B:\lazarus_main\lcl\interfaces\win32\win32callback.inc:2456 7 WindowProc(19925054, 44, 3576034448, 20955304) at B:\lazarus_main\lcl\interfaces\win32\win32callback.inc:2772 8 user32:CallWindowProcW+1016 at :0
Edited by Martin