Hallo!
ich habe folgenden Code:
Delphi-Quellcode:
var
buf1, buf2, buf3: Pointer;
[...]
begin
[...]
getmem(buf1, biSizeImage);
getmem(buf2, biSizeImage);
getmem(buf3, biSizeImage);
if GetDIBits(ssDC, ssHBmp, 0, biHeight, buf1, ssBmpInfo, DIB_RGB_COLORS) = 0 then begin
showmessage('Fehler buf1');
end;
if GetDIBits(ssDC, ssHBmp, 0, biHeight, buf2, ssBmpInfo, DIB_RGB_COLORS) = 0 then begin
showmessage('Fehler buf2');
end;
if GetDIBits(ssDC, ssHBmp, 0, biHeight, buf3, ssBmpInfo, DIB_RGB_COLORS) = 0 then begin
showmessage('Fehler buf3');
end;
[...]
end;
GetDIBits funktioniert immer 1 mal und schlägt 2 mal fehl. Dabei ist die Reihenfolge in der ich GetMem aufrufe entscheidend. GetDIBits funktioniert immer nur mit dem Buffer, der als erstes reserviert wird, bei den anderen schlägt er fehl. Hier zum Beispiel klappt der erste Aufruf von GetDIBits, die anderen beiden schlagen fehl.
Um überhaupt den Fehler so weit einzugrenzen habe ich ewig gebraucht. Und jetzt habe ich keine Ahnung was der Fehler zu bedeuten hat. Leider hilft RaiseLastOSError nicht weiter. (Deshalb hat die Fehlereingrenzung so lange gedauert.) Und ähnliche Funktionen bringen mich auch nicht weiter. Ich habe alles in der Hilfe-Kategorie Speicherverwaltung ausprobiert:
GetMem, AllocMem, SysGetMem - hat aber auch nichts geändert.
Hat jemand eine Idee?
Grüße
blablab