Invalid conversion
-
Hallo zusammen !
Ich versuche DIB Section in Anwendungsbereich anzuzeigen, nur bei Code ausführen tritt Fehler auf:Fehler in Zeile 32: G:\Programmierung\.....\....\....\main.cpp|96|error: invalid conversion from 'BYTE** {aka unsigned char**}' to 'void**' [-fpermissive]|
[/code]
hier der Code:
HBITMAP CreateDibSectionFromDibFile (PTSTR szFileName) { BITMAPFILEHEADER bmfh ; BITMAPINFO * pbmi ; BYTE * pBits ; BOOL bSuccess ; DWORD dwInfoSize, dwBytesRead ; HANDLE hFile ; HBITMAP hBitmap ; // Datei für Lesezugriffe öffnen (und gegen Schreibaktionen anderer Prozesse sperren) hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL) ; if (hFile == INVALID_HANDLE_VALUE) return NULL ; bSuccess = ReadFile (hFile, &bmfh, sizeof (BITMAPFILEHEADER), &dwBytesRead, NULL) ; if (!bSuccess || (dwBytesRead != sizeof (BITMAPFILEHEADER)) || (bmfh.bfType != * (WORD *) "BM")) { CloseHandle (hFile) ; return NULL ; } dwInfoSize = bmfh.bfOffBits - sizeof (BITMAPFILEHEADER) ; pbmi= malloc(dwInfoSize); bSuccess = ReadFile (hFile, pbmi, dwInfoSize, &dwBytesRead, NULL) ; if (!bSuccess || (dwBytesRead != dwInfoSize)) { free (pbmi) ; CloseHandle (hFile) ; return NULL ; } hBitmap = CreateDIBSection (NULL, pbmi, DIB_RGB_COLORS, &pBits, NULL, 0) ; if (hBitmap == NULL) { free (pbmi) ; CloseHandle (hFile) ; return NULL ; } ReadFile (hFile, pBits, bmfh.bfSize - bmfh.bfOffBits, &dwBytesRead, NULL) ; free (pbmi) ; CloseHandle (hFile) ; return hBitmap ; }
Habe nur probiert der Inahlt der Variable "dwInfoSize in BYTE zu konvertieren:
pbmi=(BYTE*) malloc(dwInfoSize);
dann hat IDE in Zeile 44 Fehler ausgegeben:
c:\....\.......\mingw\bin\..\lib\gcc\mingw32\4.7.1\..\..\..\..\include\wingdi.h|2737|error: initializing argument 4 of 'HBITMAP__* CreateDIBSection(HDC, const BITMAPINFO*, UINT, void**, HANDLE, DWORD)' [-fpermissive]|
Wie kann ich den Fehler beheben ?
-
in Zeile 32:
pbmi = reinterpret_cast<BITMAPINFO*>(new unsigned BYTE [dwInfosSize]);
In Zeile 44:
hBitmap = CreateDIBSection (NULL, pbmi, DIB_RGB_COLORS, (void**) &pBits, NULL, 0) ;
Jetzt funz bestens !