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

2024-04-19 10:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

您可以在Pyglet tracker上找到问题#552 by clicking here.

正如您在源代码中看到的,流的发布作为一个TODO项被忽略了:

第204行的注释甚至包括我的问题:如何调用IUnknown::Release on stream?

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

LPSTREAM = c_void_p

所以,这就是我的背景——现状和局限性。现在,我的问题-再次。如果我只有一个指针,如何调用IStream::Release?我有一个长时间运行的进程,每5秒左右加载不同的图像,这看起来对我来说是个问题。我能理解C/C++,有时我也会做一些编程,但我不是Win32 API专家。救命啊!在


Tags: 对象内存releasebyhere源代码linetracker
2条回答

也许这有帮助,它也属于同一个问题。在

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

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

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

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

相关问题 更多 >