Compartir a través de


Reglas de administración de memoria

El tiempo de vida de los punteros a las interfaces siempre se administra a través de los métodos AddRef y Release en cada interfaz COM. Para obtener más información consulte Reglas 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 de entrada.
  • El llamado debe asignar los parámetros de salida; el autor de la llamada los libera mediante el asignador de memoria de tareas COM estándar. Consulte Asignador de memoria OLE para obtener más información.
  • El autor de la llamada asigna inicialmente los parámetros de entrada/salida y, a continuación, se libera y reasigna por el llamado, si es necesario. Como es true para los parámetros de salida, 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, en los que un fragmento de código asigna la memoria y otro fragmento de código la 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 requiere especial atención es el tratamiento de los parámetros de salida y de entrada-salida 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 de salida y de entrada-salida. Esto conduce a las siguientes reglas adicionales:

  • En caso de que se produzca un error, los parámetros deben establecerse siempre en un valor que se pueda limpiar sin que el autor de la llamada tenga que realizar ninguna acción.
  • 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 garantizarlo es (en parte) establecer estos valores en NULL en la entrada de la 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 (permaneciendo así en el valor con el que el autor de la llamada los inicializó) o se deben establecer explícitamente, como en el caso de una devolución del error del parámetro de salida.

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 almacenamiento estrictamente interna a una aplicación COM se realice 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 los códigos auxiliares del servidor RPC, consulte el tema Administración de memoria de código auxiliar de servidor.