Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Program måste allokera minne för dessa data. TAPI och tjänstleverantören tillhandahåller data. Om åtgärden är asynkron är data inte tillgängliga förrän det asynkrona svarsmeddelandet anger att åtgärden lyckades.
Alla datastrukturer som används för att skicka data mellan programmet och TAPI:et är utplattade. Datastrukturer innehåller alltså inte pekare till understrukturer som innehåller datakomponenter med variabilitetsstorlek. I stället måste datastrukturer som används för att skicka tillbaka variabelmängder av data till programmet ha följande metastruktur:
DWORD dwTotalSize;
DWORD dwNeededSize;
DWORD dwUsedSize;
<fixed size fields>
DWORD dw<VarSizeField1>Size;
DWORD dw<VarSizeField1>Offset;
<fixed size fields>
DWORD dw<VarSizeField2>Size;
DWORD dw<VarSizeField2>Offset;
<common extensions>
<var sized field1>
<var sized field2>
dwTotalSize medlem är storleken i byte som allokerats till den här datastrukturen. Den markerar slutet på datastrukturen och anges av programmet innan det anropar funktionen som använder den här datastrukturen. Funktionen läser eller skriver inte längre än den här storleken. Ett program måste ange dwTotalSize medlem för att ange det totala antalet byte som allokerats för TAPI för att returnera innehållet i strukturen.
TAPI fyller i dwNeededSize medlem. Det anger hur många byte som krävs för att returnera alla begärda data. Förekomsten av fält med variabilitetsstorlek gör det ofta omöjligt för programmet att uppskatta den datastrukturstorlek som krävs för allokering. Det här fältet returnerar det antal byte som faktiskt krävs för data. Det här talet kan vara mindre än, lika med eller större än dwTotalSize, och det innehåller utrymme för själva dwTotalSize- medlem. Om den är större fylls den returnerade strukturen bara delvis. Om fälten som programmet kräver är tillgängliga i den partiella strukturen måste inget annat göras. Annars bör programmet allokera en struktur minst storleken på dwNeededSize och anropa funktionen igen. Vanligtvis är tillräckligt med utrymme tillgängligt den här gången för att returnera all information, även om det är möjligt att storleken kan ha ökat igen.
TAPI fyller dwUsedSize medlem om den returnerar data till programmet för att ange den faktiska storleken, i byte, på den del av datastrukturen som innehåller användbara data. Om till exempel en struktur som allokerades var för liten och det trunkerade fältet är ett fält med variabilitetsstorlek, är dwNeededSize större än dwTotalSizeoch det trunkerade fältet lämnas tomt. dwUsedSize medlem kan därför vara mindre än dwTotalSize. Partiella fältvärden returneras inte.
Efter den här rubriken är den fasta delen av datastrukturen. Den innehåller vanliga fält och storlek/offset-par som beskriver fälten med faktisk variabilitetsstorlek. Förskjutningsfältet innehåller förskjutningen i byte för fältet med variabilitetsstorlek från början av posten. Storleksfältet innehåller storleken i byte för det variabilitetsstora fältet. Om ett fält med variabilitetsstorlek är tomt är storleksfältet noll och förskjutningen är inställd på noll. Fält med variabilitetsstorlek som skulle trunkeras om den totala strukturstorleken är otillräcklig lämnas tom. Det vill: deras storleksfält är inställt på noll och förskjutningen är inställd på noll. Fälten med variabilitetsstorlek följer de fasta fälten.
Om tjänstleverantören måste fylla i en variabelmedlem initierar TAPI motsvarande storlek och förskjutning av medlemmar till noll. Om tjänstleverantören fyller i variabelmedlemmen måste den ange motsvarande storlek och förskjutningsmedlemmar till lämpliga värden, inklusive dwUsedSize och dwNeededEdSize om den anger variabelmedlemmar. Tjänsteleverantören får inte trunkera en variabelmedlem för att få den att passa in i det tillgängliga utrymmet.
Tjänstleverantören måste starta variabelmedlemmar omedelbart efter de fasta medlemmarna i strukturen och lämna allt extra utrymme i slutet av det allokerade minnet så att TAPI kan använda det för medlemmarna med variabel längd. Den kan placera variabelmedlemmarna i valfri ordning, men medlemmarna måste vara sammanhängande.