2012-12-20 1 views
0

PNG 파일을로드하고 ID2D1Bitmap으로 반환하는 간단한 함수가 있습니다. 그러나 CreateBitmapfromWicBitmap 함수를 호출하려고하면 디버그 어설 션 오류가 발생합니다. 재미있는 점은 내가 별도의 프로젝트에서 imageload 기능을 처음 만들었고 거기에서 제대로 작동한다는 것입니다. 이 두 함수는 모두 동일한 코드를 사용하고 두 번째 함수는 오류를 제공합니다.Direct2d CreateBitmapfromWICBitmap이 ATL 내에서 어설 션 오류 발생

ID2D1Bitmap* Wnd::LoadPng(LPCWSTR Path) { 
    CComPtr<IWICBitmapDecoder> pDecoder; 
    CComPtr<IWICBitmapFrameDecode> pFrame; 
    CComPtr<ID2D1Bitmap> pBit; 
    CComPtr<IWICFormatConverter> pConv; 
    HRESULT Hr; 

    Hr = m_pWICFactory->CreateDecoderFromFilename(Path,NULL,GENERIC_READ,WICDecodeMetadataCacheOnDemand,&pDecoder); 

    if (SUCCEEDED(Hr)) { 
     Hr = m_pWICFactory->CreateFormatConverter(&pConv); 
    } 

    if (SUCCEEDED(Hr)) { 
     Hr = pDecoder->GetFrame(0,&pFrame); 
    } 

    if (SUCCEEDED(Hr)) { 
     Hr = pConv->Initialize(pFrame,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,0,0.f,WICBitmapPaletteTypeCustom); 
    } 

    if (SUCCEEDED(Hr)) { 
     Hr = m_pRT->CreateBitmapFromWicBitmap(pConv,0,&pBit); 
    } 
    return pBit; 
} 

오류가 기능 _NoAddRefReleaseOnCComPtr 라인 (182)에 atlcomcli.h에 발생합니다

다음은 erroring 코드입니다.

모든 헤더와 라이브러리를 두 번 확인했으며 두 프로젝트 모두에서 동일합니다 (두 번째 프로젝트에서 일부 추가 헤더 사용).

여기에 작동하는 코드입니다 :

 CComPtr<IWICFormatConverter> Conv; 
     m_pWICFactory->CreateFormatConverter(&Conv); 
     CComPtr<IWICBitmapFrameDecode> Frame; 
     m_pDecoder->GetFrame(0,&Frame); 
     Frame->GetSize(&W,&H); 
     Conv->Initialize(Frame,GUID_WICPixelFormat32bppPBGRA,WICBitmapDitherTypeNone,0,0.f,WICBitmapPaletteTypeCustom); 
     CComPtr<ID2D1Bitmap> Bit; 
     Hr = m_pRT->CreateBitmapFromWicBitmap(Conv,0,&Bit); 
     m_pBitmap.push_back(Bit); 

BitmapDecoder 여기에 미리 정의되어 있지만, 첫 조각에서와 동일합니다.

------------------------------- 고정 -------------- --------------

세 번째로 내 렌더링 대상의 init 함수를 호출하는 것을 잊어 버렸습니다.

답변

0

어설 션 오류는 CComPtr 템플릿을 통해 NULL 인터페이스 포인터를 "사용"하려고한다는 경고입니다. 호출 스택에서 코드의 정확한 행을 찾아보고, NULL이 아닌 것으로 예상되는 NULL 포인터를 보유하는 변수를 찾아야합니다. 그렇지 않으면 디버거로 코드를 단계별로 실행하십시오.

+0

Whoa ... 세 번째로 내 렌더링 타겟의 init 함수를 호출하는 것을 잊어 버렸습니다. – Nooobody

관련 문제