О вызове CreateDIBSection в потоке
В функции с именем buildtexture он загружал изображение и текстуру сборки для OpenGL, когда я вызывал CreateDIBSection, он создавал растровое изображение. Если функция buildtexture была вызвана как обычная функция-член, ничего плохого не будет. Но если я вызвал эту функцию-член в потоке, CreateDIBSection вернет 0, что означает, что это не удалось. И даже GetLastError alse вернул 0 после вызова CreateDIBSection. Я предполагаю, что поток не имеет достаточно места для создания растрового изображения. И я не знаю, как решить эту проблему. Кто-нибудь может мне помочь? Большое спасибо!
2 ответа
Вероятность ошибки нехватки памяти.
CreateDibSection нужен HDC, где вы его взяли? Получил ли другой поток это и затем вручил это Вам?
Допустимо использовать DC в потоке, отличном от того, который его получил. но вам нужно убедиться, что использование DC сериализуется, когда вы используете его более чем в одном потоке.
Убедитесь, что контроллер домена все еще действует, когда вы пытаетесь его использовать, и что только один поток за раз пытается использовать его.
Эта ошибка означает, что вы не удалили Hdc. Перед CreateDIBSection необходимо удалить новый Hdc. Но как! Что нового HDC приходят Просто получите старый HDC перед изменением.
После CreateDIBSection вначале Hdc изменится, когда очень скоро форма Resize, закроет форму и свернет форму
Если что CreateDIBSectio вернет 0, вы должны быть удалены Hdc
hDib = CreateDIBSection(hDCRef, bi, DIB_RGB_COLORS, lPtr, 0, 0)
if (hDib = 0) then DeleteObject hdc
if (hDib <> 0) then hBmpOld = SelectObject(hdc, hDib) 'already create not need to delete