2010-10-30 10 views
8

soy nuevo con esta cosa llamada interfaz y DirectX. Estoy enganchando una interfaz de DirectX de cierto juego y estoy usando DirectX para dibujar mis cosas, como texturas y fuentes. Mi problema es que: Cuando el programa llama a la función de reinicio enganchado del dispositivo, necesito borrar todas mis cosas de la memoria, las interfaces de COM.Si no lo hago, después de llamar al evento de reinicio, el juego solo intenta crea una nueva superficie llamando a d3dDierctx9Create pero falla y solo comete un error y cierra el juego.¿Cómo liberar una interfaz?

Creo que solo tengo que borrar todas las cosas antes del evento de reinicio, se explica en Msdn.

Respuesta

19

Usted no libera una interfaz. Es referenciado y administrado por el compilador. Déjalo fuera del alcance, asigne una interfaz diferente a la variable, o asigne nil, y el compilador generará una llamada a su método _Release automáticamente para que pueda limpiarse cuando su recuento de referencia se reduzca a 0.

+0

Por lo tanto, con los recursos de directx, normalmente llama a 'onResetDevice' en ellos si lo admiten, o los vuelve a crear y reasigna a la variable Delphi. Eso liberará automáticamente el recurso original, como Mason dijo ... _sólo hay que tener mucho cuidado de no retener el recurso en otra variable en alguna parte, ya que eso evitará que se libere el recurso_ (es decir, referenceCount> 0). Por lo general, el uso de algún tipo de objetos envoltura que gestiona el recurso hace que esto sea un poco más fácil. –

Cuestiones relacionadas