first - program c++
En COM: ¿Debo llamar a AddRef después de CoCreateInstance? (3)
El contrato con COM es cada vez que se le entrega un objeto de una función como esta, como CoCreateInstance (), QueryInterface () (que es lo que CoCreateInstance () llama en última instancia), etc., el llamante siempre llama a AddRef () antes de regresar, y la persona que llama (usted) Siempre suelte () cuando haya terminado.
Puedes usar CComPtr <> para hacer esto más simple, y simplemente hace lo correcto.
Ahora, si necesita entregar este puntero a otro objeto que espera que sea utilizable más allá de la vida útil de su objeto, entonces debe llamar a AddRef () antes de entregarlo.
Recomiendo Essential COM by Don Box para leer más sobre este tema.
¿CoCreateInstance llama automáticamente a AddRef en la interfaz que estoy creando o debería llamarlo manualmente después?
En resumen: no .
No necesita llamar a AddRef en su código.
Un contador de referencia que tiene el objeto COM es 1 después de CoCreateInstance .
Por lo tanto, si llama Release , el contador de referencia será 0 y el objeto COM se eliminará.
Una excepción a la regla: CComObject <> :: CreateInstance () NO realiza un AddRef. Debes hacer eso después de llamarlo.