У меня есть следующая строка C ++, которая получает дескриптор GDI + из контекста устройства GDI:
//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.
В чем может быть проблема здесь? И как это решить?
Вы проверили инициализацию 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;
}
Других решений пока нет …