3

我正在尝试修复 Pyglet 中的内存泄漏。它只发生在 win32 上,因为它涉及 IStream 对象,由 ole32.CreateStreamOnHGlobal 分配,未被释放。

您可以通过单击此处在 Pyglet 跟踪器上找到问题 #552 。

正如您在源代码中看到的那样,流的发布被遗漏为 TODO 项:

第 204 行的评论甚至包括我的问题:How to call IUnknown::Release on stream?

流在第 142 行分配。由于pyglet不依赖外部依赖,我认为我不能使用pywin32。我们在 python 端所知道的关于流对象的所有信息都是gdiplus.py 第 53 行

LPSTREAM = c_void_p

所以,这就是我的背景——情况和局限性。现在,我的问题 - 再次。如果我只有一个指针,我如何调用 IStream::Release?我有一个长时间运行的过程,每 5 秒左右加载不同的图像,看起来这对我来说是个问题。我可以理解 C/C++,我什至偶尔会做一些编程,但无论如何我都不是 win32 api 专家。帮助!

4

2 回答 2

1

perhaps this helps, it pertains to same problem.

http://bytes.com/topic/python/answers/23946-closing-excel-application

于 2012-02-06T11:47:40.593 回答
1

pyglet 包含一个与 IUnknown 接口的 COM 模块(pyglet.com,由 dsound 音频驱动程序使用)。

编写 GDI+ 接口时该模块不存在。

您可以重写图像加载以使用 COM 对象而不是 C 接口,或者仅使用您拥有的蒸汽指针作为 IUnknown 的 this 指针。

于 2012-02-08T21:27:49.413 回答