Ponteiros de referência de Out-Only inseridos
Quando você usa ponteiros de referência [out]-only no Microsoft RPC, os stubs de servidor gerados alocam apenas o primeiro nível de ponteiros acessíveis do ponteiro de referência. Ponteiros em níveis mais profundos não são alocados pelos stubs, mas devem ser alocados pela camada de aplicativo do servidor. Por exemplo, suponha que uma interface especifique uma matriz [out]-only de ponteiros de referência:
/* IDL file (fragment) */
typedef [ref] short * PREF;
Proc1([out] PREF array[10]);
Neste exemplo, o stub do servidor aloca memória para 10 ponteiros e define o valor de cada ponteiro como nulo. O aplicativo de servidor deve alocar a memória para os 10 inteiros curtos referenciados pelos ponteiros e, em seguida, definir os 10 ponteiros para apontar para os inteiros.
Quando a estrutura de dados [out]-only inclui ponteiros de referência aninhados, os stubs do servidor alocam apenas o primeiro ponteiro acessível do ponteiro de referência. Por exemplo:
/* 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);
No exemplo anterior, os stubs de servidor alocam o ponteiro psTop e a estrutura STRUCT_TOP_TYPE. O ponteiro de referência ps1 no STRUCT_TOP_TYPE é definido como nulo. O stub do servidor não aloca todos os níveis da estrutura de dados, nem aloca o STRUCT1_TYPE ou seu ponteiro inserido, psValue.