Ci siamo quasi, è come ho pensato il problema è che le procedure nel programma non vanno, solo funzioni, forse per il fatto che il programma ha bisogno di ricevere un valore dalle dll..
mettendo function il programma non mi crasha più, però mi succede che se appena apro il programma e senza disegnare linee o altro sopra, usando direttamente il flood fill, l'immagine si colora tutta con il colore scelto, però se invece ci disegno linee sopra no.

ecco il codice completo della dll:

codice:
library FloodFill;

uses
  SysUtils, Windows, Classes, Graphics;

function HexToTColor(sColor : PChar) : TColor;
begin
   Result :=
     RGB(
       StrToInt('$'+Copy(sColor, 1, 2)),
       StrToInt('$'+Copy(sColor, 3, 2)),
       StrToInt('$'+Copy(sColor, 5, 2))
     ) ;
end;

function Flood(x,y: real; ColorBack,FileName: PChar): real; stdcall;
var FloodGriglia: TBitmap;
begin
    FloodGriglia:=TBitmap.Create;
    try
        FloodGriglia.LoadFromFile(FileName);
        FloodGriglia.Canvas.Brush.Color:=clRed;
        FLoodGriglia.Canvas.Brush.Style:=bsSolid;
        FloodGriglia.Canvas.FloodFill(trunc(x),trunc(y),HexToTColor(ColorBack),fsBorder);
        FloodGriglia.SaveToFile(FileName);
    finally
          FloodGriglia.Free;
    end;
    Result:=1;
end;

exports Flood;

{$R *.res}

begin
end.
Nel programma ho messo anche un drawline proprio per verificare se ci sono problemi del genere.