2012-05-18 62 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's correct advice](http://stackoverflow.com/a/10661197/366904),你的代碼對我來說工作得很好。我不能讓它破壞或重現你描述的錯誤,甚至試圖加載一個25 MB的位圖文件。而且我還沒有像增加資源堆的大小那樣做任何事情。這是由VS 2010嚮導創建的乾淨臨時Win32項目中的Windows 7的標準安裝。你可以在一個類似的清潔項目中重現這一點嗎? –

+2

你也應該只測試LoadImage的返回值,如果它是0,你應該調用GetLastError。如果沒有錯誤,那麼API可能沒有調用SetLastError,所以錯誤代碼8可能來自調用鏈中較早的其他API調用。 – Gunner

+1

你可以加載你的BMP文件到Paint中嗎?也許它損壞了,並說它高度是十億像素。這將解釋「內存不足」錯誤。 –

回答

2

呀,一些API返回錯誤代碼是有點神祕和不適合錯誤。

您嘗試加載「standard.bmp」的文件是磁盤上的一個文件,而不是在資源部分右邊?那麼要從磁盤加載文件,LoadImage(hInst)的第一個參數必須爲NULL,並且fuLoad標誌需要包含您正確擁有的LR_LOADFROMFILE。

+0

我將LoadImage()的第一個參數更改爲NULL,我收到同樣的錯誤 –

+0

另外,我使用regedit來增加資源堆大小(建議在不同的線程中)無效 –

+0

@ P.Avery:是您的工作文件夾('GetCurrentDirectory')匹配你期望'.bmp'文件的文件? – 0xC0000022L