1

在名为 buildtexture 的函数中,它为 OpenGL 加载图像并构建纹理,当我调用 CreateDIBSection 时,它将创建一个位图。如果函数 buildtexture 作为普通成员函数调用,则不会有任何问题。但是如果我在一个线程中调用这个成员函数,CreateDIBSection 将返回 0,这意味着它失败了。甚至 GetLastError 在调用 CreateDIBSection 后也返回 0。我猜线程没有足够的空间来创建位图。而且我不知道如何解决这个问题。任何人都可以帮助我吗?非常感谢!

4

2 回答 2

1

不太可能是内存不足错误。

CreateDibSection 需要一个 HDC,你从哪里得到的?有没有其他线程拿到它然后交给你?

在获得它的线程之外的线程中使用 DC 是合法的。但是当您在多个线程中使用 DC 时,您需要确保它的使用是序列化的。

确保 DC 在您尝试使用它时仍然有效,并且一次只有一个线程在尝试使用它。

于 2009-12-29T02:04:08.457 回答
0

您遇到的那个错误意味着您在 CreateDIBSection 之前没有删除 Hdc 必须删除新的 Hdc。但是怎么样!什么是新的 HDC 来了 在更改之前先获取旧的 HDC。

在 CreateDIBSection 之后,Hdc 会在非常时间 Resize form , Close form 和 Minimize form 时发生变化

如果 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
于 2010-01-22T15:00:35.073 回答