Вот вобщем код на Delphi, который резко перезагружает Windows XP-Pro SP2. Собственно мне использовать функцию GetDIBits (докапываться до ошибки в коде) не к чему пока, но все же интересно - почему такой резкий слет системы. Код (Text): procedure TForm1.FormClick(Sender: TObject); var hbmp: HBITMAP; dc: HDC; stm: TStream; buff: pointer; binfo: TBitmapInfo; begin hbmp := CreateBitmap (width, height, 1, 32, nil); dc := CreateCompatibleDC (canvas.Handle); SelectObject (dc, hbmp); // now avaible memory dc Bitblt (dc, 0, 0, width, height, canvas.Handle, width, height, SRCCOPY); GetMem (buff, width * height * 4); // for bits FillChar (binfo, sizeof (binfo), 0); // reset to 0 binfo.bmiHeader.biSize := sizeof (binfo); binfo.bmiHeader.biWidth := width; binfo.bmiHeader.biHeight := height; binfo.bmiHeader.biPlanes := 0; binfo.bmiHeader.biBitCount := 32; binfo.bmiHeader.biCompression := BI_BITFIELDS; GetDIBits (dc, hbmp, 0, 0, buff, binfo, DIB_RGB_COLORS); end;{}
У меня уже есть исправленный (работающий) код. Не ясно почему в данном случае вместо завершения с ошибкой слетает система.
Можно (минимальный) скомпиленый экзешник прицепить? Не получается воспроизвести проблему, а Delphi я только 8ю нашёл. Предполагаю, что проблема в GetMem