Obsługa bitmapy w programie konsolowym powoduje błąd SIGSEGV

0

Ostatnio zaktualizowałem sobie Lazarusa z wersji 1.6.2 do 1.6.4 - rekompilowałem swój projekt i mało szlag mnie nie trafił, zaświecił jak choinka. Na starszej wersji wszystko się kompilowało, a nowa wersja nie potrafiła obsługiwać helperów znajdujących się w osobnym module - przez to dostałem całą litanię błędów illegal qualifier przy wszystkich wywołaniach metod helperów. Sytuacja istniała jedynie w mojej paczce komponentów, bo w testowej aplikacji wszystko działało. Wywaliłem nową wersję i z powrotem wróciłem do 1.6.2 - jeszcze większy WTF...

Aby w konsolowej aplikacji móc korzystać z modułu Graphics z paczki LCL, wystarczyło przejść do okna Project Inspector i dodać paczkę do Required Packages. Dzięki temu można było korzystać z tego modułu i klas jakie zawiera.

Po reinstalacji środowiska, nie mogę normalnie z tego modułu korzystać. Tworzę projekt, dodaję paczkę do wymaganych, piszę kod używający TBitmap i już przy pierwszej wywołanej z obiektu metodzie dostaję wyjątek SIGSEGV.

Przykładowy kod:

{$MODE OBJFPC}{$LONGSTRINGS ON}

uses
  Graphics;
var
  LBitmap: TBitmap;
begin
  LBitmap := TBitmap.Create();
  try
    LBitmap.PixelFormat := pf24bit;
    LBitmap.SetSize(100, 100);

    LBitmap.Canvas.Brush.Color := clRed;
    LBitmap.Canvas.FillRect(LBitmap.Canvas.ClipRect);

    LBitmap.SaveToFile('C:\bitmap.bmp');
  finally
    LBitmap.Free();
  end;

  Write('done...');
  ReadLn();
end.

Wyjątek leci w linijce:

LBitmap.SetSize(100, 100);

Po zamknięciu komunikatu o wyjątku, przenosi mnie do pliku lclintf.inc do poniższej funkcji:

function RawImage_QueryDescription(AFlags: TRawImageQueryFlags; var ADesc: TRawImageDescription): Boolean;
begin
  Result := WidgetSet.RawImage_QueryDescription(AFlags, ADesc);
end;

Spotkał się ktoś z takim problemem już? :D

Normalnie ręce opadają... Mam naklepanych trochę narzędzi do obróbki grafiki właśnie w postaci apek konsolowych (które tworzyłem głównie w wersji 1.6.2), które tworzyłem właśnie w taki sposób jaki opisałem. I teraz jak bym chciał to nie mogę ich przekompilować, bo przestaną działać. Wszystko działało dopóki nie zabrałem się za aktualizowanie.

1

Debugger mówi że są wszędzie null pointery i trzeba

uses
  Graphics, Interfaces;  
0

Teraz dopiero wbiłeś mi klina. Ciekawe dlaczego do tej pory (na dokładnie tej samej wersji środowiska i kompilatora) wszystko działało bez linkowania tego modułu, a teraz - po świeżej instalacji - bez tego modułu nie obejdzie się. Źródeł LCL nie modyfikowałem, więc wcześniej też korzystałem z tego co dostarczył instalator. Coś wcześniej musiało tworzyć cały widgetset.

Ehh.. nie chce mi się już głowić nad tym i użerać - ważne że problem z głowy. Dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1