Python,Pyglet,win32 API,COM​​:如果我只有一个指针,如何调用IStream :: Release?

时间:2012-02-05 17:14:06

标签: python winapi gdi pyglet pythoncom

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

您可以在Pyglet跟踪器by clicking here.

上找到问题#552

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

第204行的评论甚至包括我的问题:如何在线上调用IUnknown :: Release?

该流在line 142中分配。由于pyglet不依赖于外部依赖,我认为我不能使用pywin32。我们在python方面所知道的关于流对象的是gdiplus.py line 53

LPSTREAM = c_void_p

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

2 个答案:

答案 0 :(得分:1)

也许这有帮助,它与同样的问题有关。

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

答案 1 :(得分:1)

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

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

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