GetDIBits cause reboot

Тема в разделе "WASM.WIN32", создана пользователем alpet, 17 май 2005.

  1. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Вот вобщем код на Delphi, который резко перезагружает Windows XP-Pro SP2. Собственно мне использовать функцию GetDIBits (докапываться до ошибки в коде) не к чему пока, но все же интересно - почему такой резкий слет системы.
    Код (Text):
    1.  
    2. procedure TForm1.FormClick(Sender: TObject);
    3. var
    4.    hbmp: HBITMAP;
    5.      dc: HDC;
    6.     stm: TStream;
    7.     buff: pointer;
    8.     binfo: TBitmapInfo;
    9. begin
    10.  hbmp := CreateBitmap (width, height, 1, 32, nil);
    11.  dc := CreateCompatibleDC (canvas.Handle);
    12.  SelectObject (dc, hbmp); // now avaible memory dc
    13.  Bitblt (dc, 0, 0, width, height, canvas.Handle, width, height, SRCCOPY);
    14.  GetMem (buff, width * height * 4); // for bits
    15.  FillChar (binfo, sizeof (binfo), 0); // reset to 0
    16.  binfo.bmiHeader.biSize := sizeof (binfo);
    17.  binfo.bmiHeader.biWidth := width;
    18.  binfo.bmiHeader.biHeight := height;
    19.  binfo.bmiHeader.biPlanes := 0;
    20.  binfo.bmiHeader.biBitCount := 32;
    21.  binfo.bmiHeader.biCompression := BI_BITFIELDS;
    22.  GetDIBits (dc, hbmp, 0, 0, buff, binfo, DIB_RGB_COLORS);
    23. end;{}
    24.  
     
  2. Barracuda

    Barracuda New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2003
    Сообщения:
    19
    А почему binfo.bmiHeader.biPlanes := 0?



    Цитата:

     
  3. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    У меня уже есть исправленный (работающий) код. Не ясно почему в данном случае вместо завершения с ошибкой слетает система.
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Можно (минимальный) скомпиленый экзешник прицепить? Не получается воспроизвести проблему, а Delphi я только 8ю нашёл. Предполагаю, что проблема в GetMem ;)