Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER

#1
[c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER
Witam!
Napisałem taki prosty kod:
Kod:
HWND window;
    HANDLE f;
    HDC _dc, dc, ddd, dc2;
    RECT re;
    int w, h;
    void *buf;
    HBITMAP bm;
    DWORD r;
    tagBITMAPINFO bi;
    BITMAPFILEHEADER bif;
    BITMAPINFOHEADER bii;
    window = GetDesktopWindow();
    _dc = GetWindowDC(window);
    GetWindowRect(window,&re);
    w = re.right, h = re.bottom;
    dc = CreateCompatibleDC(0);
    bm = CreateCompatibleBitmap(_dc,w,h);
    SelectObject(dc,bm);
    StretchBlt(dc,0,0,w,h,_dc,0,0,w,h,SRCCOPY);
    buf = malloc(w*h*4+300);
    GetObject(bm,84,buf);
    ddd = GetDC(0);
    dc2 = CreateCompatibleDC(ddd);

    bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
    bi.bmiHeader.biWidth = w;
    bi.bmiHeader.biHeight = h;
    bi.bmiHeader.biPlanes = 1;
    bi.bmiHeader.biBitCount = 32;
    bi.bmiHeader.biCompression = 0;
    bi.bmiHeader.biSizeImage = 0;
    CreateDIBSection(dc,&bi,DIB_RGB_COLORS,&buf,0,0);
    GetDIBits(dc,bm,0,h,buf,&bi,DIB_RGB_COLORS);

    bif.bfType = MAKEWORD('B','M');
    bif.bfSize = w*h*4+54;
    bif.bfOffBits = 54;

    bii.biSize = 40;
    bii.biWidth = w;
    bii.biHeight = h;
    bii.biPlanes = 1;
    bii.biBitCount = 32;
    bii.biCompression = 0;
    bii.biSizeImage = w*h*4;

    f = CreateFile(L"plik.bmp",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,0);
    WriteFile(f,&bif,sizeof(bif),&r,NULL);
    WriteFile(f,&bii,sizeof(bii),&r,NULL);
    WriteFile(f,buf,w*h*4,&r,NULL);
    CloseHandle(f);
    free(buf);
Jeżeli ustawię C w Visual C++ 2008 to wyskakują takie błędy:
error C2065: 'tagBITMAPINFO' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'bi'
error C2224: left of '.bmiHeader' must have struct/union type
(....)
Jest tego aż 49 i nie będę kopiował wszystkiego.
Gdy przełączę język na C++ to kompiluje się bez błędu ale w okienku output po wyłączeniu trybu debugowania pojawia się coś takiego:
First-chance exception at 0x7c26df51 in ahmed.exe: 0xC0000004: Access violation reading location 0x00ddfff7.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#2
RE: [c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER
A powrzucałeś windows.h w includach i inne potrzebne?
Jak możesz to daj cały kod.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: [c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER
Atup
Cały kod to zawiera oprócz tego int main() { } i #include <Windows.h>
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: [c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER
Na Windowsowskich sposobach robienia screenshootów się zbytnio nie znam, ale zauważyłem że do dwóch funkcji:

Kod:
CreateDIBSection(dc,&bi,DIB_RGB_COLORS,&buf,0,0);
GetDIBits(dc,bm,0,h,buf,&bi,DIB_RGB_COLORS);

Używasz jako output ten sam bufor - buf, linijka która powodowała crash to free(buf) czyli przy zwalnianiu pamięci się rozjeżdżał, po przeszukania internetu zauważyłem, że funckja:

Kod:
CreateDIBSection
jest niepotrzebna więc ją wywaliłem i zostawiłem samo GetDIBits i program już się nie wywalał przy free, a screenshot dalej wykonuje się poprawnie.


Chciałbym tylko zaznaczyć, że to z CreateDIBSection to są tylko moje szybkie spekulacje i może być kompletnie na odwrót, ale u mnie działa to bez problemu bez tej funkcji.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Scared [MS Access] Tworzenie kwerend Cixi 2 6513 12.01.2016, 13:24
Ostatni post: Cixi
  [C++ WinAPI] Kompresja bitmapy kikiw 0 5298 25.12.2014, 16:15
Ostatni post: kikiw
  winapi-taki sam tekst w kolejnych zakładkach sfx 0 3125 27.07.2014, 20:28
Ostatni post: sfx

Skocz do:


Wybrane wątki ([c,winapi]-Access voliation reading location i problem z BITMAPFILEHEADER)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Skrypt usuwający pliki sylwiaa1 2 4562 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 10853 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 11244 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 10845 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 10487 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 9568 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 13356 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 10092 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 10522 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 12004 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 10813 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 11634 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 10831 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 11545 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 14360 19.12.2018 16:29
Ostatni post: Szachista