Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) en de Active Template Library (ATL) worden nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
In gespecialiseerde situaties wilt u mogelijk een aangepast tekenreeksbeheer implementeren dat meer doet dan alleen wijzigen welke heap wordt gebruikt om geheugen toe te wijzen. In deze situatie moet u de IAtlStringMgr-interface handmatig implementeren als uw aangepaste tekenreeksbeheer.
Om dit te doen, is het belangrijk om eerst te begrijpen hoe CStringT die interface gebruikt om de tekenreeksgegevens te beheren. Elk exemplaar heeft CStringT een aanwijzer naar een CStringData-structuur . Deze structuur met variabele lengte bevat belangrijke informatie over de tekenreeks (zoals lengte), evenals de werkelijke tekengegevens voor de tekenreeks. Elke aangepaste tekenreeksbeheerder is verantwoordelijk voor het toewijzen en vrijmaken van deze structuren op verzoek van CStringT.
De CStringData structuur bestaat uit vier velden:
pStringMgr Dit veld verwijst naar de
IAtlStringMgrinterface die wordt gebruikt om deze tekenreeksgegevens te beheren. WanneerCStringTu de tekenreeksbuffer opnieuw wilt toewijzen of vrij wilt maken, wordt de methode Opnieuw toewijzen of Vrij van deze interface aangeroepen, waarbij deCStringDatastructuur als parameter wordt doorgegeven. Wanneer u eenCStringDatastructuur toewijst in uw tekenreeksbeheer, moet u dit veld zo instellen dat deze verwijst naar uw aangepaste tekenreeksbeheer.nDataLength Dit veld bevat de huidige logische lengte van de tekenreeks die is opgeslagen in de buffer, met uitzondering van de afsluit null.
CStringTwerkt dit veld bij wanneer de lengte van de tekenreeks verandert. Bij het toewijzen van eenCStringDatastructuur moet uw tekenreeksbeheerder dit veld instellen op nul. Bij het opnieuw toewijzen van eenCStringDatastructuur moet uw aangepaste tekenreeksbeheer dit veld ongewijzigd laten.nAllocLength Dit veld bevat het maximum aantal tekens (met uitzondering van het afsluitnd null) dat in deze tekenreeksbuffer kan worden opgeslagen zonder deze opnieuw te verplaatsen. Wanneer
CStringTde logische lengte van de tekenreeks moet worden verhoogd, controleert het eerst dit veld om ervoor te zorgen dat er voldoende ruimte in de buffer is. Als de controle mislukt,CStringTroept u uw aangepaste tekenreeksbeheer aan om de buffer opnieuw te toewijzen. Wanneer u eenCStringDatastructuur toewijst of opnieuw toewijst, moet u dit veld instellen op ten minste het aantal tekens dat is aangevraagd in de parameter nChars op IAtlStringMgr::Toewijzen of IAtlStringMgr::Reallocate. Als er meer ruimte in de buffer is dan is aangevraagd, kunt u deze waarde instellen om de werkelijke hoeveelheid beschikbare ruimte weer te geven. Hierdoor kanCStringTde tekenreeks de volledige toegewezen ruimte vullen voordat deze weer moet worden aangeroepen in de tekenreeksbeheerder om de buffer opnieuw te kunnen toewijzen.nRefs Dit veld bevat het huidige verwijzingsaantal van de tekenreeksbuffer. Als de waarde één is, wordt de buffer door één exemplaar
CStringTgebruikt. Daarnaast mag het exemplaar zowel de inhoud van de buffer lezen als wijzigen. Als de waarde groter is dan één, kunnen meerdere exemplarenCStringTde buffer gebruiken. Omdat de tekenbuffer wordt gedeeld,CStringTkunnen exemplaren alleen de inhoud van de buffer lezen. Als u de inhoud wilt wijzigen,CStringTmaakt u eerst een kopie van de buffer. Als de waarde negatief is, wordt slechts één exemplaar vanCStringTde buffer gebruikt. In dit geval wordt de buffer beschouwd als vergrendeld. Wanneer eenCStringTexemplaar een vergrendelde buffer gebruikt, kunnen er geen andere exemplaren vanCStringTde buffer delen. In plaats daarvan maken deze exemplaren een kopie van de buffer voordat ze de inhoud bewerken. Daarnaast probeert hetCStringTexemplaar dat gebruikmaakt van de vergrendelde buffer niet de buffer te delen van een anderCStringTexemplaar dat eraan is toegewezen. In dit geval kopieert hetCStringTexemplaar de andere tekenreeks naar de vergrendelde buffer.Bij het toewijzen van een
CStringDatastructuur moet u dit veld instellen op basis van het type delen dat is toegestaan voor de buffer. Voor de meeste implementaties stelt u deze waarde in op één. Hierdoor kan het normale gedrag voor het delen van kopiëren op schrijfbewerkingen worden toegestaan. Als uw tekenreeksbeheer het delen van de tekenreeksbuffer echter niet ondersteunt, stelt u dit veld in op een vergrendelde status. Dit dwingtCStringTertoe om deze buffer alleen te gebruiken voor het exemplaar vanCStringTde toegewezen buffer.