我究竟做错了什么?程序崩溃。 [GDI+, WINAPI, C++]
What am I doing wrong? Program crashes. [GDI+, WINAPI, C++]
我用 C++ 编写了一个程序,它必须在屏幕上打印图像并在 2 秒后退出。一切正常,直到程序必须退出。当程序开启时 return 0;指令,它崩溃了。我认为这是因为错误的释放,但代码似乎是正确的。
</p>
<pre><code>#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;
}
我有最新的编译器,我通过以下方式编译:
g++ -c main.cpp -std=g++11
g++ -o main main.o -lgdiplus
图形析构函数在 GdiplusShutdown 之后执行。你需要用
括起来
Graphics graphics(hoc);
在 { }
我用 C++ 编写了一个程序,它必须在屏幕上打印图像并在 2 秒后退出。一切正常,直到程序必须退出。当程序开启时 return 0;指令,它崩溃了。我认为这是因为错误的释放,但代码似乎是正确的。
</p>
<pre><code>#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;
}
我有最新的编译器,我通过以下方式编译:
g++ -c main.cpp -std=g++11
g++ -o main main.o -lgdiplus
图形析构函数在 GdiplusShutdown 之后执行。你需要用
括起来Graphics graphics(hoc);
在 { }