2016-08-31 7 views
-1

GetObject() 설명서에서는 lpvObject이 NULL 일 때 필요한 바이트 수를 반환합니다. 하지만, 나는 그것이 실패 할 때 반환 값인 0을 얻는다.lbvobject가 NULL 일 때 GetObject가 실패하는 이유

내가 뭘 잘못했는지 알아 내려고 노력했다. 내가 말했듯이 aGetObject() 함수 호출을 위해, 항상 0 또는 실패,

case WM_PAINT: 
{ 
    PAINTSTRUCT ps; 
    HDC hdc; 
    hdc = BeginPaint(hwnd, &ps); 
    HBITMAP hbmap; 
    hbmap = (HBITMAP) LoadImage(NULL, str_path, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); 
    BITMAP bm; 
    HDC bmapmemory = CreateCompatibleDC(hdc); 
    SelectBitmap(bmapmemory, hbmap); 
    int a = GetObject(hbmap, sizeof(BITMAP), NULL); 

    BitBlt(hdc, 0, 0, 750, 750, bmapmemory, 0, 0, SRCCOPY); 
    char c[64]; 
    sprintf_s(c, sizeof(c), "%f\n", a); 
    OutputDebugStringA(c); 

    DeleteDC(bmapmemory); 
    DeleteObject(bmap); 

    EndPaint(hwnd,& ps); 

    return 0; 
} 

:

은 그냥 WM_PAINT 메시지를 사용하여 기본 창 설정을 가지고있다.

+1

'hbitmap'은 실제로 유효한 핸들입니까? 가능성이 없습니다. 먼저 NULL이 아닌지 확인하십시오. 그렇다면'LoadImage'를 호출 한 후'GetLastError'를 체크하십시오. (변수가 보통'hbmap'이라는 철자가 틀린데,'GetObject'를 호출하는 것 외에는'hbitmap '이라고 부릅니다. 그냥 오타라고 생각 합니다만, 복사해서 붙여 넣기 할 때 오타가 불가능해야합니다. 코드 * 스택 오버플로 질문에 ...) –

+0

"hbmap"을 의미합니까? – molbdnilo

+0

예 hbmap을 의미했습니다. 관련이없는 물건을 제거 할 때 오타가 발생했습니다. 편집 감사합니다. 그 이상한 부분은 핸들이 성공적으로 만들어졌고 비 널 (null)이 아니며 제대로 화면에 blts된다는 것입니다. – anonymous123432

답변

2

"%f" 형식을 사용하고 있지만 정수를 전달하고 있습니다. 그건 정의되지 않은 행동입니다. 디버거에서 반환 값을 살펴보면 이 아니며이 아님을 알 수 있습니다.