如何释放一个接口?

8
我对名为接口和DirectX的技术还不熟悉。我正在从某个游戏中挂钩DirectX接口,并使用DirectX绘制自己的东西,如纹理和字体。
我的问题是:当程序调用设备的已挂钩重置函数时,我需要清除内存中的所有内容,包括Com接口。如果我不清除,在Reset事件被调用后,游戏会尝试调用d3dDierctx9Create创建新表面,但会失败并导致错误并关闭游戏。
我认为我只需要在Reset事件之前清除所有东西,这在Msdn上有解释。
1个回答

19

你不需要释放接口,它是由编译器进行引用计数和管理。让它超出作用域、将变量赋值为一个不同的接口或者赋值为nil,编译器会自动生成对其_Release方法的调用,以便当其引用计数降到0时清理自身。


所以对于DirectX资源,通常情况下,如果它们支持,则会在它们上调用“onResetDevice”,或重新创建它们并将它们重新分配给Delphi变量。这将自动释放原始资源,就像Mason所说的那样...你只需要非常小心,不要在其他地方保留资源,因为那会防止资源被释放(即referenceCount > 0)。通常使用一些管理资源的封装对象可以使这个过程变得更容易一些。 - Paul-Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接