Ho questo codice (ho bisogno di aggiungere oggetto stringa a TStringList):È necessario liberare un BSTR (WideString) allocato con SysAllocString?
var
WS: WideString;
begin
WS := 'allocated string';
SL.AddObject('my string', TObject(SysAllocString(PWideChar(WS))));
E poi leggerlo:
var
WS: WideString;
begin
WS := PWideChar(SL.Objects[0]);
ShowMessage(WS);
mi chiedevo se il sistema si prenderà cura di BSTR che era assegnato con SysAllocString
. o devo chiamare SysFreeString
? non è chiaro dalla documentazione.
Ora, se il sistema lo disalloca, c'è un modo per dimostrarlo?
P.S: Infatti, si tratta di suffucient chiamare:
SL.AddObject('my string', TObject(PWideChar(WS)));
Senza usare SysAllocString
. (e non riesco a capire come funziona)
Speravo che il sistema gestisse la distruzione dell'oggetto "WideString". se uso una struttura di classe ho bisogno di liberare manualmente ogni oggetto (non c'è OwnsObject in D7 per TStringList). Non sono ancora sicuro se I ** deve ** stringhe libere che sono allocate con 'SysAllocString' o il sistema può occuparsene per me? ... – zig
Sì, ** devi ** stringhe BSTR gratuite allocate da SysAllocString. –