Compartir a través de


Reglas de administración de memoria

La duración de punteros a interfaces siempre se administra a través de los métodos AddRef y Release en cada interfaz COM. Para obtener más información, vea reglas de para administrar recuentos de referencias.

Para todos los demás parámetros, es importante cumplir ciertas reglas para administrar la memoria. Las reglas siguientes se aplican a todos los parámetros de los métodos de interfaz, incluido el valor devuelto, que no se pasan por valor:

  • El autor de la llamada debe asignar y liberar los parámetros en los parámetros.
  • Los parámetros out deben ser asignados por el llamado; el autor de la llamada libera mediante el asignador de memoria de tareas COM estándar. Consulte el asignador de memoria OLE para obtener más información.
  • El autor de la llamada asigna inicialmente los parámetros in/out y, a continuación, se libera y reasigna por el llamado, si es necesario. Como es true para los parámetros out, el autor de la llamada es responsable de liberar el valor devuelto final. Se debe usar el asignador de memoria COM estándar.

En los dos últimos casos, donde un fragmento de código asigna la memoria y otro fragmento de código lo libera, el uso del asignador COM garantiza que los dos fragmentos de código usen los mismos métodos de asignación.

Otra área que necesita especial atención es el tratamiento de parámetros fuera y fuera en condiciones de error. Si una función devuelve un código de error, el autor de la llamada normalmente no tiene forma de limpiar los parámetros out o de in-out. Esto conduce a las siguientes reglas adicionales:

  • En caso de una condición de error, los parámetros siempre deben establecerse de forma confiable en un valor que se limpiará sin ninguna acción por parte del autor de la llamada.
  • Todos los parámetros de puntero de salida deben establecerse explícitamente en NULL. Normalmente se pasan en un parámetro de puntero a puntero, pero también se pueden pasar como miembros de una estructura que el autor de la llamada asigna y el código llamado rellena. La manera más sencilla de asegurarse de que esto es (en parte) para establecer estos valores en NULL en la entrada de función. Esta regla es importante porque promueve una interoperabilidad de aplicaciones más sólida.
  • En condiciones de error, todos los parámetros de entrada y salida deben dejarse solos por el código llamado (por lo tanto, permanecen en el valor al que el autor de la llamada inicializó) o se deben establecer explícitamente, como en el caso de devolución del error del parámetro out.

Recuerde que estas convenciones de administración de memoria para aplicaciones COM solo se aplican en interfaces y API públicas; No es necesario que la asignación de memoria sea estrictamente interna a una aplicación COM mediante estos mecanismos.

COM usa internamente llamadas a procedimiento remoto (RPC) para comunicarse entre clientes y servidores. Para obtener más información sobre cómo administrar la memoria en códigos auxiliares del servidor RPC, consulte el tema administración de memoria de código auxiliar del servidor .