Ok, now I found who is causing the problem =) function TCDWidgetSet.RawImage_CreateBitmaps(const ARawImage: TRawImage; out ABitmap, AMask: HBitmap; ASkipMask: Boolean): Boolean; var NewData: PByte; lRawImage: TRawImage; lBitmap: TCDBitmap; begin {$ifdef VerboseCDBitmap} DebugLn(Format(':>[TCDWidgetSet.RawImage_CreateBitmaps] ARawImage.Description=%s', [ARawImage.Description.AsString])); {$endif}
Result := False; ABitmap := 0; AMask := 0; // Copy the data if ARawImage.DataSize > 0 then begin NewData := AllocMem(ARawImage.DataSize); <<<--------- System.Move(ARawImage.Data^, NewData^, ARawImage.DataSize); end else NewData := nil; {$ifdef VerboseCDBitmap} DebugLn(Format(':[TCDWidgetSet.RawImage_CreateBitmaps] Data=%x Data size=%d NewData=%x', [PtrUInt(ARawImage.Data), ARawImage.DataSize, PtrUInt(NewData)])); {$endif} // this is only a rough implementation, there is no check against bitsperpixel lBitmap := TCDBitmap.Create; ABitmap := HBITMAP(lBitmap); System.Move(ARawImage, lRawImage, SizeOf(TRawImage)); lRawImage.Data := NewData; <<<----- lBitmap.Image := TLazIntfImage.Create(lRawImage, True); <<<----- Result := ABitmap <> 0; This shows like this in the log: :[TCDWidgetSet.RawImage_CreateBitmaps] Data=B73FCC90 Data size=3600 NewData=B73FE360 And later on: Marked memory at $B73FE360 invalid <--- Same address! Wrong signature $AAAAAAAA instead of AFB54FD8 $08065DDB $08065E97 $0805C888 $0812AADC TLAZINTFIMAGE__DESTROY, line 3244 of intfgraphics.pas $08057AD2 $08057AD2 $0817F638 TCDWIDGETSET__DELETEOBJECT, line 863 of ./customdrawn/customdrawnwinapi.inc $0816DF1F DELETEOBJECT, line 181 of ./include/winapi.inc $080FDC1E TSHAREDRASTERIMAGE__FREEHANDLE, line 40 of ./include/sharedrasterimage.inc I use AllocMem and TLazIntfImage uses: procedure TLazIntfImage.FreeData; begin if FDataOwner then ReallocMem(FRawImage.Data, 0) -- Felipe Monteiro de Carvalho -- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus