2

GDI のデバイス コンテキストから GDI+ ハンドルを取得する次の C++ 行があります。

//HDC hDC = device context from GDI
if(hDC)
{
    //Obtain graphics handle for GDI++
    Graphics* pgrpx = new Graphics(hDC);    //I get invalid memory exception here

    //Code continues
    //...

    //Free object
    delete pgrpx;
    pgrpx = NULL;
}

私のテストでは問題なく動作します。

しかし最近、アプリのクラッシュ ダンプを受け取りました。「アクセスできないスレッド参照メモリの場所」という例外が、コードの上記の行 (Graphics オブジェクトが初期化されるはずの場所) にあります。

ここで何が問題になる可能性がありますか? そして、それに対処する方法は?

4

1 に答える 1

2

GDI+の初期化を確認しましたか? ここに問題があるかどうかはわかりませんが、試してみてください。

Gdiplus::GdiplusStartupInput    gdiplusStartupInput;
ULONG_PTR                       gdiplusToken;
if(GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL) != Gdiplus::Ok)
{
    MessageBox(NULL, TEXT("GDI+ failed to start up!"),
        TEXT("Error!"), MB_ICONERROR);
    return -1;
}
于 2012-11-28T16:45:16.990 に答える