2016-08-31 16 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を意味しました。無関係なものを取り除くときはタイプミスでした。編集ありがとう。それは奇妙な部分は、ハンドルが正常に作成され、非ヌルであり、画面上に正しく表示されていることです。 – anonymous123432

答えて

2

"%f"フォーマットを使用していますが、整数を渡しています。それは未定義の動作です。デバッガで戻り値を調べると、でなく、がゼロであることがわかります。

関連する問題