2016-07-27 3 views
0

2 초 후에 화면에 이미지를 인쇄하고 종료해야하는 C++ 프로그램을 작성했습니다. 프로그램이 종료 될 때까지 모든 것이 괜찮 았습니다. 프로그램이 돌아올 때 0; 명령, 충돌. 나는 잘못된 거래로 인한 것이라고 생각하지만, 코드는 정확하다고 보입니다.내가 뭘 잘못 했니? 프로그램이 충돌합니다. [GDI +, WINAPI, C++]


#include <iostream> 
#include <windows.h> 
#include <gdiplus.h> 

using namespace std; 
using namespace Gdiplus; 

HDC hdc = GetDC(NULL); 

int main() { 
    GdiplusStartupInput gdiplusStartupInput; 
    ULONG_PTR   gdiplusToken; 
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); 

    Graphics graphics(hdc); 
    Rect dst(500, 500, 17, 17); 
    Image* image = Image::FromFile(L"image.png", false); 
    cout<<"Image size: "<<image->GetWidth()<<", "<<image->GetHeight()<<endl; 
    graphics.DrawImage(image, dst); 
    delete image; 

    GdiplusShutdown(gdiplusToken); 
    Sleep(2000); 
    return 0; 
} 


나는 최신 compilator있어 난으로 컴파일 :

g ++ -c MAIN.CPP -std = g ++ (11)

그램 ++ - main main.o -lgdiplus

답변

1

그래픽 소멸자는 GdiplusShutdown 후에 실행됩니다. 당신은

+0

감사합니다 {}에서

Graphics graphics(hoc); 

로 블록을 둘러싸 필요합니다! 이제 모든 것이 잘 작동합니다. :) –

+1

@IgorSantarek - 물론 GdiplusStartup과 main - Image :: FromFile의 결과를 확인하지 못했습니다. 따라서 최소 2 if() {}가 필요합니다. 그러나 직접 오류는 소멸자가 종료했을 때 실행 한 것입니다. 로컬 블록, 현재 버전에서 이것은 GdiplusShutdown 이후였습니다. – RbMm

관련 문제