¿La persona que llama necesita soltar el IShellBrowser * obtenida a través de la WM_GETISHELLBROWSER indocumentado (WM_USER + 7) mensaje?

StackOverflow https://stackoverflow.com/questions/1909853

  •  19-09-2019
  •  | 
  •  

Pregunta

Varios han señalado que existe un mensaje de indocumentado que recupera el puntero de interfaz IShellBrowser desde el HWND de diálogo común para el archivo abierto y guardar los cuadros de diálogo.

Pero hay información contradictoria (o ninguna información) sobre si ese puntero es AddRef'd, o si es sólo la dirección de crudo volvió, y la liberación de NO () debe ser llamado en él?

¿Fue útil?

Solución

No. Puede que le resulte útil el siguiente enlace: Las reglas del modelo de objetos componentes .

Extracto:

  

Reglas de recuento de referencias

     

Regla 1: AddRef debe ser llamado para   cada nueva copia de una interfaz   puntero, y liberación para cada llamada   destrucción de un puntero de interfaz,   excepto reglas donde subsiguientes   permitir explícitamente lo contrario.

     

Las siguientes reglas se llaman común   nonexceptions a la Regla 1.

     
      
  • Regla 1a: En-OUT-parámetros a funciones. La persona que llama debe AddRef el parámetro real, ya que será lanzado por el destinatario de la llamada cuando el cabo-valor se almacena en la parte superior de la misma.
  •   
  • Regla 1b: Recogida de una variable global. La copia local del puntero de interfaz obtienen de una copia existente del puntero en una variable global debe ser independiente de Referencia contado, porque llamadas funciones para deshacer la copia en el mundial, mientras que la copia local aún está vivo.
  •   
  • 1c Regla: New punteros sintetizados de "la nada". Una función que sintetiza un puntero de interfaz utilizando el conocimiento interno especial, en lugar de obtenerlo de alguna otra fuente, debe hacer un AddRef inicial en el puntero de nueva síntesis. Ejemplos importantes de este tipo de rutinas incluyen rutinas de creación de instancias, las implementaciones de IUnknown :: QueryInterface, y así sucesivamente.
  •   
  • Regla 1d: Devolución de una copia de un puntero almacenado internamente. Después se ha devuelto el puntero, el destinatario de la llamada no tiene idea de cómo su vida útil se refiere a la de la copia almacenada internamente del puntero. De este modo, el destinatario de la llamada debe llamar AddRef en la copia del puntero antes de devolverlo.
  •   
     

Regla 2: el conocimiento especial sobre la parte   de una pieza de código de la   las relaciones de los comienzos y   las terminaciones de los tiempos de vida de dos o   más copias de un puntero de interfaz   puede permitir pares AddRef / liberación a ser   omitido.

     
      
  • Desde la perspectiva, de conteo de referencias de un cliente COM es siempre un concepto por interfaz. Los clientes nunca deben suponer que un objeto utiliza el mismo número de referencia para todas las interfaces.
  •   
  • Los valores de retorno de AddRef y liberación no debe ser invocada, y se debe utilizar solamente para propósitos de depuración.
  •   
  • estabilidad del indicador; ver detalles en el archivo de Ayuda OLE en "Reglas de conteo de referencias", subsección "La estabilización del este puntero y mantenerlo válido."
  •   
     

Vea la excelente "Gestión de objetos   Vidas en OLE" por el artículo técnico   Douglas Hodges, y el Capítulo 3 de   Dentro OLE, 2ª edición, por Kraig   Brockshmidt (MSDN biblioteca, libros) para   más información sobre   de recuento de referencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top