Image析构函数中的访问冲突

Def*_*ult 4 windows gdi+ access-violation visual-studio-2008

我可能会说一个非常简单的程序..

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

using namespace Gdiplus;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR cmdLine, int nShow){
    // Gdiplus variables
    GdiplusStartupInput mGdiplusStartupInput;
    ULONG_PTR           mGdiplusToken;
    GdiplusStartup(&mGdiplusToken, &mGdiplusStartupInput, NULL);

    Bitmap bitmap(L"left.bmp");


    GdiplusShutdown(mGdiplusToken);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行此示例时,我在此函数中的GdiplusBitmap.h中获得了访问冲突

inline 
Image::~Image()
{
    DllExports::GdipDisposeImage(nativeImage);
}
Run Code Online (Sandbox Code Playgroud)

通过删除对Bitmap bitmap(L"left.bmp");一切的调用工作正常..我试图在msdn上找到一个简单的例子(例如在Bitmap构造函数附近的某处,但没有找到任何东西.)

我错过了什么?

Jef*_*tes 8

Bitmap关闭GDI +的调用之后,您创建的实例超出了范围.因此当Bitmap被破坏时,它无法调用给定的GdipDisposeImage方法.

如果确保bitmap在关闭GDI +之前删除该错误,则该错误应该消失.

  • +1这个.在位图周围添加一对括号以强制它超出范围,或使其成为指针类型(丑陋). (4认同)