pointeur - help
Publié : lun. 10/mai/2010 17:47
bonjour,
je suis nouveau, et évidemment j'ai des problèmes avec les pointeurs.
Mon problème: je voudrais créer une class pour la concaténation d'une chaine qui pourrait être très longue, or en sortie je récupère une value qui n'est pas un texte.
voici le code :
toute aide serait la bienvenue, je tourne en rond.
Merci.
je suis nouveau, et évidemment j'ai des problèmes avec les pointeurs.
Mon problème: je voudrais créer une class pour la concaténation d'une chaine qui pourrait être très longue, or en sortie je récupère une value qui n'est pas un texte.
voici le code :
Code : Tout sélectionner
EnableExplicit
;STRINGBUILDER -> SB
;UNICODE
Interface classSB
ObjectDestroy .l ()
LengthGet .l ()
Get .l ()
Append .l (psString.s)
EndInterface
Structure tagSB
lvTable.l
*String.l
lLen.l
lMode.l
EndStructure
;-- Constructor Functions
Procedure SB_ObjectCreate(plMode.l = #PB_Unicode)
Protected *This.tagSB = AllocateMemory(SizeOf(tagSB))
*This\lvTable = ?Functions
*This\lLen = SizeOf(LONG)
*This\String = AllocateMemory(*This\lLen)
*This\lMode = plMode
ProcedureReturn *This
EndProcedure
Procedure SB_ObjectDestroy(*This.tagSB)
FreeMemory(*This)
EndProcedure
;-- Manager Functions
;-- Class Functions
Procedure.l SB_LengthGet(*This.tagSB) ; Retourne la longueur
ProcedureReturn (*This\lLen)
EndProcedure
Procedure.s SB_Get(*This.tagSB) ; Retourne la chaîne
Protected sReturn.s
sReturn = PeekS(*This\String + 4,#PB_Unicode)
ProcedureReturn sReturn
EndProcedure
Procedure SB_Append(*This.tagSB, psString.s) ; Ajoute chaine au pointeur
Protected lNewLen = Len(psString) * SizeOf(CHARACTER)
Protected *NewStr = ReAllocateMemory(*This\String, *This\lLen + lNewLen)
If *NewStr
PokeS(*NewStr + *This\lLen , psString)
*This\lLen = MemorySize(*This\String)
Debug PeekS(*This\String + 4)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
DataSection
Functions:
Data.l @SB_ObjectDestroy()
Data.l @SB_LengthGet()
Data.l @SB_Get()
Data.l @SB_Append()
EndDataSection
; -- Code
Global.classSB SB = SB_ObjectCreate()
SB\Append("Ma zone mémoire")
SB\Append(" est maintenant plus grande")
Debug SB\Get()
SB\ObjectDestroy()
toute aide serait la bienvenue, je tourne en rond.
Merci.