Pointeurs de référence Out-Only incorporés
Lorsque vous utilisez des [ ] pointeurs de référence en sortie seule dans Microsoft RPC, les stubs de serveur générés allouent uniquement le premier niveau des pointeurs accessibles à partir du pointeur de référence. Les pointeurs à des niveaux plus profonds ne sont pas alloués par les stubs, mais doivent être alloués par la couche d’application serveur. Par exemple, supposons qu’une interface spécifie un [ ] tableau en dehors des pointeurs de référence :
/* IDL file (fragment) */
typedef [ref] short * PREF;
Proc1([out] PREF array[10]);
Dans cet exemple, le stub serveur alloue de la mémoire pour 10 pointeurs et définit la valeur de chaque pointeur sur null. L’application serveur doit allouer la mémoire pour les 10 entiers courts référencés par les pointeurs, puis définir les 10 pointeurs pour qu’ils pointent vers les entiers.
Lorsque la [ ] structure de données en sortie seule comprend des pointeurs de référence imbriqués, les stubs de serveur allouent uniquement le premier pointeur accessible à partir du pointeur de référence. Par exemple :
/* 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);
Dans l’exemple précédent, les stubs de serveur allouent le pointeur psTop et le _ _ type struct de structure. Le point de référence ps1 dans le type de la _ partie _ supérieure de la structure a la valeur null. Le stub serveur n’alloue pas tous les niveaux de la structure de données, ni n’alloue le _ type STRUCT1 ou son pointeur incorporé, psValue.