Top-Level en ingesloten aanwijzers
Als u wilt weten hoe aanwijzers en de bijbehorende gegevenselementen worden toegewezen in Microsoft RPC, moet u onderscheid maken tussen aanwijzers op het hoogste niveau en ingesloten aanwijzers. Het is ook handig om te verwijzen naar de set met alle aanwijzers die geen aanwijzers op het hoogste niveau zijn.
aanwijzers op het hoogste niveau zijn aanwijzers die zijn opgegeven als de namen van parameters in functieprototypes. Aanwijzers op het hoogste niveau en de bijbehorende verwijzingen worden altijd toegewezen op de server.
Ingesloten aanwijzers zijn aanwijzers die zijn ingesloten in gegevensstructuren, zoals matrices, structuren en samenvoegingen. Wanneer ingesloten aanwijzers alleen uitvoer naar een buffer schrijven en null zijn voor invoer, kan de servertoepassing de waarden wijzigen in niet-null. In dit geval wijzen de client-stubs nieuw geheugen toe voor deze gegevens.
Als de ingesloten aanwijzer vóór de aanroep niet null is op de client, wijzen de stubs geen geheugen toe aan de client bij terugkeer. In plaats daarvan proberen de stubs het geheugen te schrijven dat is gekoppeld aan de ingesloten aanwijzer in het bestaande geheugen op de client die aan die aanwijzer is gekoppeld, waarbij de gegevens al daar worden overschreven.
Notitie
Voor gegevens die van of naar een buffer worden gelezen en die de buffergrootte niet opgeeft, moet de uitvoerlengte kleiner zijn dan of gelijk zijn aan de invoerlengte. Er wordt een RPC-uitzondering gegenereerd wanneer overloop wordt gedetecteerd. Voor tekenreeksgegevens wordt de uitvoerlengte bepaald door de lengte van de invoertekenreeks te controleren. Daarom kunnen uitvoertekenreeksen de lengte van invoertekenreeksen niet overschrijden. Aanbevolen procedures zijn om dit te voorkomen door altijd een opgegeven parameter voor de grootte op te geven om de grootte van de buffer aan te geven.
Ingesloten alleen-schrijven-aanwijzers worden besproken in combinatie van aanwijzers en directionele kenmerken.
De term verwijzingen op niet-topniveau verwijst naar alle aanwijzers die niet zijn opgegeven als parameternamen in het functieprototype, inclusief ingesloten aanwijzers en meerdere niveaus van geneste aanwijzers.