비트 맵을 생성하는 코드 줄의 주석을 제거 할 때 첫 번째 예외 예외가 발생합니다. 내가 만든 다른 스프라이트와 같은 방식으로이 스프라이트 시트 BMP를 만들었습니다. 오류 메시지는 이것이다 :0xC0000005 : CopyMemory()를 호출 한 후 액세스 위반이 발생했습니다.
First-chance exception at 0x004788ca in HenwayRevamped.exe: 0xC0000005: Access violation writing location 0x02224000.
내가 마이클 모리슨의 GameEngine 클래스를 기반으로 게임을 실행하고 있습니다. 나는 많은 StackOverflow 스레드 & this handy site을 포함하여이 오류에 대한 몇 시간의 연구를 해왔지만 여전히 문제가 무엇인지 확실하지 않습니다. 여기에 함수 호출는 다음과 같습니다
// Create a bitmap from a resource
Bitmap::Bitmap(HDC hDC, UINT uiResID, HINSTANCE hInstance)
: m_hBitmap(NULL), m_iWidth(0), m_iHeight(0)
{
Create(hDC, uiResID, hInstance);
}
다음은
기능입니다 :
BOOL Bitmap::Create(HDC hDC, UINT uiResID, HINSTANCE hInstance)
{
// Free any previous DIB info
Free();
// Find the bitmap resource
HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(uiResID), RT_BITMAP);
if (hResInfo == NULL)
return FALSE;
// Load the bitmap resource
HGLOBAL hMemBitmap = LoadResource(hInstance, hResInfo);
if (hMemBitmap == NULL)
return FALSE;
// Lock the resource and access the entire bitmap image
PBYTE pBitmapImage = (BYTE*)LockResource(hMemBitmap);
if (pBitmapImage == NULL)
{
FreeResource(hMemBitmap);
return FALSE;
}
// Store the width and height of the bitmap
BITMAPINFO* pBitmapInfo = (BITMAPINFO*)pBitmapImage;
m_iWidth = (int)pBitmapInfo->bmiHeader.biWidth;
m_iHeight = (int)pBitmapInfo->bmiHeader.biHeight;
// Get a handle to the bitmap and copy the image bits
PBYTE pBitmapBits;
m_hBitmap = CreateDIBSection(hDC, pBitmapInfo, DIB_RGB_COLORS,
(PVOID*)&pBitmapBits, NULL, 0);
if ((m_hBitmap != NULL) && (pBitmapBits != NULL))
{
const PBYTE pTempBits = pBitmapImage + pBitmapInfo->bmiHeader.biSize +
pBitmapInfo->bmiHeader.biClrUsed * sizeof(RGBQUAD);
CopyMemory(pBitmapBits, pTempBits, pBitmapInfo->bmiHeader.biSizeImage);
// Unlock and free the bitmap graphics object
UnlockResource(hMemBitmap);
FreeResource(hMemBitmap);
return TRUE;
}
// Something went wrong, so cleanup everything
UnlockResource(hMemBitmap);
FreeResource(hMemBitmap);
Free();
return FALSE;
}
는 또한, 여기에 지역 창/w 내 IDE의 스크린 샷입니다. 예외가 throw되는 라인 거터 점에서 녹색 화살표 아이콘 :
Image Hosted by ImageShack.us http://imageshack.us/a/img341/7678/20121216010703am.png
는 문제가있어 내 장치 컨텍스트인가? hDC 변수 아래의 빨간색 느낌표 아이콘은 문제를 지적한 것처럼 보이지만 할당 된 핸들이있어서 확실하지 않습니다. 나는 아이디어를 다 써 버렸고 주인을 향해 달려 가고 있습니다.
당신은 이미이 게시물이 당신의 게시물에 처음으로 나타나는 생성자에서 해고되는 것과 같은'Create()'호출이 아니라는 것을 이미 알고 있어야합니다. 이 코드는 장치 컨텍스트, 너비, 높이 및 색을 예상하는'Create()'를 시작합니다. 당신이 보여주고있는 관계없는'Create()'는 리소스 비트 맵을로드하는 것입니다 (또는 적어도 시도하고 있습니다). – WhozCraig
'pBitmapInfo-> bmiHeader' 안에 무엇이 있습니까?나는'biSizeImage' 값이 잘못 될 것으로 기대합니다. –
헤드 업에 감사드립니다, @WhozCraig; 잘못된 오버로드 된 전화를 잘못 게시했습니다. 실제로 전화가 OP에 있습니다. @Roman,이 호출은 147458을 반환합니다. 이미지의 Windows 속성 창에서 이미지 크기는 147512입니다. 문제가 있다면 어떻게 해결할 수 있습니까? – KongMD