【发布时间】:2021-11-09 18:36:39
【问题描述】:
我使用GDI+ API 只是为了在屏幕上显示图像 (bmp)。这是执行任务的函数的代码:
void drawImg_ArmorInfo_PupupWnd(HDC hdc) {
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Image* image = new Image(L"C:/Users/Darek/F2 stuff/art/intrface/armor_info_1.bmp");
int a1 = image->GetWidth();
int a2 = image->GetHeight();
Graphics graphics(hdc);
graphics.DrawImage(image, 0, 0);
delete image;
GdiplusShutdown(gdiplusToken);
}
问题是我在调用GdiplusShutdown 函数后遇到了一个异常:Access violation writing location 0xXXXXXXXX。当我注释掉的时候有什么有趣的
Graphics graphics(hdc);
graphics.DrawImage(image, 0, 0);
部分程序运行没有任何问题,但当然,图像没有被绘制。当我注释掉对GdiplusShutdown 函数的调用时 - 再次没有问题。
代码有什么问题,这里的问题可能是什么原因?
【问题讨论】:
-
GdiplusStartup/Shutdown 属于 main()。
-
Drawing a Line -- 查看两个配对调用的范围。
-
@Hans Passant "GdiplusStartup/Shutdown 属于 main" - 你能这么好解释一下你的意思吗?它怎么可能属于
main,因为我是从drawImg_ArmorInfo_PupupWnd函数中调用它的!?