Dela via


Top-Level och inbäddade pekare

För att förstå hur pekare och deras associerade dataelement allokeras i Microsoft RPC måste du skilja mellan toppnivåpekare och inbäddade pekare. Det är också användbart att referera till uppsättningen med alla pekare som inte är pekare på toppnivå.

pekare på toppnivå är de som anges som namn på parametrar i funktionsprototyper. Pekare på toppnivå och deras referenser allokeras alltid på servern.

Inbäddade pekare är pekare som är inbäddade i datastrukturer som matriser, strukturer och fackföreningar. När inbäddade pekare bara skriver utdata till en buffert och är null vid indata kan serverprogrammet ändra sina värden till icke-null. I det här fallet allokerar klientstubbarna nytt minne för dessa data.

Om den inbäddade pekaren inte är null på klienten före anropet allokerar inte stubs minne på klienten vid retur. I stället försöker stubs att skriva minnet som är associerat med den inbäddade pekaren till det befintliga minnet på klienten som är associerad med den pekaren, vilket skriver över data som redan finns där.

Not

För data som lästs från eller skrivits till en buffert och som inte anger buffertstorleken måste utdatalängden vara mindre än eller lika med indatalängden. Ett RPC-undantag utlöses när spill identifieras. För strängdata bestäms utdatalängden genom att kontrollera längden på indatasträngen. Därför får utdatasträngar inte överskrida längden på indatasträngar. Bästa praxis är att undvika detta genom att alltid inkludera en storleksspecifik parameter som anger buffertens storlek.

 

Inbäddade skrivskyddade pekare beskrivs i Kombinera pekare- och riktningsattribut.

Termen pekare på icke-toppnivå refererar till alla pekare som inte anges som parameternamn i funktionsprototypen, inklusive både inbäddade pekare och flera nivåer av kapslade pekare.