Compartir a través de


Punteros de referencia de Out-Only incrustados

Cuando se usan punteros de referencia de solo salida 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 a niveles más profundos no se asignan mediante 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 enteros cortos a los que hacen referencia los punteros y, a continuación, establecer los 10 punteros para que apunten a los enteros.

Cuando la estructura de datos [out]-only 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 de 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.