Windows 映像析构函数中的访问冲突

Windows 映像析构函数中的访问冲突,windows,visual-studio-2008,gdi+,access-violation,Windows,Visual Studio 2008,Gdi+,Access Violation,我可以说是一个非常简单的程序 #include <windows.h> #include <gdiplus.h> using namespace Gdiplus; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR cmdLine, int nShow){ // Gdiplus variables GdiplusStartupInput mGdiplusStartupInput; U

我可以说是一个非常简单的程序

#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;
}
通过删除对位图的调用(L“left.bmp”)一切正常。。我试着在msdn上找到一个简单的例子(例如,在附近的某个地方,但什么也没找到。)


我缺少什么?

在调用关闭GDI+后,您创建的
位图
实例不在范围内。因此,当
位图
被破坏时,它无法调用给定的
GdipDisposeImage
方法


如果您确保在关闭GDI+之前删除了
位图
,则该错误应该会消失。

+1。在位图周围添加一对括号,使其超出范围,或使其成为指针类型(丑陋)。这很有意义。但是我如何显式销毁在堆栈上创建的位图?@Mike:位图调用有点像块作用域。。这实际上解决了问题。甜心:)谢谢你的快速回复replies@Michael:是的。通过限制对象的绑定范围,您可以强制对象离开深层;)
inline 
Image::~Image()
{
    DllExports::GdipDisposeImage(nativeImage);
}