2012-05-18 6 views
1

죄송합니다. 중복되어 있지만 다른 곳에서 답변을 찾을 수 없습니다. 나는 단순히 런타임 동안 WINAPI의 LoadImage() 함수를 사용하여 이미지를로드하려고 시도하고있다. 저장 공간이 충분하지 않음을 나타내는 오류 코드 (8)가 표시됩니다 (오류 코드는 here입니다).Win32 LoadImage() 파일 오류

파일 (2.5kb) 상대적으로 작은 그래서 내 코드에 문제가 있는지 궁금 :

void OnCreate() 
{ 
... 
HBITMAP hbmDeck = (HBITMAP)LoadImage(hInstance, L"standard.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE); 

    DWORD err = GetLastError(); 
    HBITMAP hbmT = SelectBitmap(hdc, hbmDeck); 
    if(!hbmT) 
    { 
     MessageBox(NULL, L"Failed to LoadImage - 'hbmDeck'", L"OnCreate()", MB_OK); 
     PostMessage(hwnd, WM_DESTROY, NULL, NULL); 
    } 
... 
} 
+0

[Gunner의 올바른 조언] (http://stackoverflow.com/a/10661197/366904)에 따르면 코드가 올바르게 작동합니다. 25MB의 비트 맵 파일을로드하려고 시도해도 사용자가 설명하는 오류를 깨거나 재현 할 수 없습니다. 그리고 리소스 힙 크기를 늘리는 것과 같이 열심히하지 않았습니다. 이것은 VS 2010 마법사로 만든 깨끗한 스크래치 Win32 프로젝트에 Windows 7을 표준 설치합니다. 이와 비슷한 깨끗한 프로젝트에서 이것을 재현 할 수 있습니까? –

+2

LoadImage의 반환 값을 테스트하고 GetLastError를 호출하면 0 일 경우에만 테스트해야합니다. 오류가 없으면 API가 SetLastError를 호출하지 않았을 수 있으므로 8의 오류 코드는 호출 체인의 초기에 다른 API 호출에서 왔을 수 있습니다. – Gunner

+1

페인트에 bmp 파일을로드 할 수 있습니까? 어쩌면 그것은 손상되어 10 억 픽셀의 키가된다고 말합니다. 그것은 "메모리 부족"오류를 설명합니다. –

답변

2

네, API 반환 오류 코드 중 일부는 약간 비밀이고 맞지 않는이 오류.

"standard.bmp"를로드하려고하는 파일이 리소스 섹션에없는 디스크의 파일입니까? 디스크에서 파일을로드하려면 LoadImage (hInst)의 첫 번째 매개 변수가 NULL이어야하며 fuLoad 플래그에 올바르게 포함 된 LR_LOADFROMFILE이 포함되어야합니다.

+0

LoadImage()의 첫 번째 매개 변수를 NULL로 변경했으며 동일한 오류가 발생했습니다. –

+0

또한 리소스 힙 크기를 늘리기 위해 regedit를 사용하여 다른 스레드에서 제안한대로 –

+0

@ P.Avery : 작업 폴더 ('GetCurrentDirectory')는'.bmp' 파일을 기대하는 것과 일치합니까? – 0xC0000022L

관련 문제