Compartir a través de


Punteros de referencia de Out-Only incrustados

Cuando se usa [punteros de referencia solo ]-only en RPC de Microsoft, los códigos auxiliares de servidor generados asignan solo el primer nivel de punteros accesibles desde el puntero de referencia. Los punteros en niveles más profundos no están asignados por los códigos auxiliares, pero deben asignarse por el nivel de aplicación del servidor. Por ejemplo, supongamos que una interfaz especifica una matriz [out]-only de punteros de referencia:

/* IDL file (fragment) */
typedef [ref] short * PREF;

Proc1([out] PREF array[10]);

En este ejemplo, el código auxiliar del servidor asigna memoria para 10 punteros y establece el valor de cada puntero en NULL. La aplicación de servidor debe asignar la memoria de los 10 short enteros a los que hacen referencia los punteros y, a continuación, establecer los 10 punteros para que apunten a los enteros.

Cuando [estructura de datos de solo ]incluye punteros de referencia anidados, los códigos auxiliares del servidor asignan solo el primer puntero accesible desde el puntero de referencia. Por ejemplo:

/* IDL file (fragment) */
typedef struct 
{
    [ref] small * psValue;
} STRUCT1_TYPE;

typedef struct 
{
    [ref] STRUCT1_TYPE * ps1;
} STRUCT_TOP_TYPE;

Proc2([out, ref] STRUCT_TOP_TYPE * psTop);

En el ejemplo anterior, los códigos auxiliares del servidor asignan el puntero psTop y la estructura STRUCT_TOP_TYPE. El puntero de referencia ps1 en STRUCT_TOP_TYPE se establece en NULL. El código auxiliar del servidor no asigna todos los niveles de la estructura de datos, ni asigna el STRUCT1_TYPE ni su puntero incrustado, psValue.