Moin moin,
@Luckie:
Also ich habe verzweifelt gesucht, deine funktionen sind auf den ersten Blick genau die gewesen,
wie die von Colin Wilson... nur mit dem Unterschied, dass seine Komponente bei mir
einwandfrei funktioniert, dagegen dein Testprogramm den von dir beschriebenen Fehler verursacht.
Wie gesagt, auf den ersten Blick... Nach ca. 20 Blicken und debuggen ist mir dann doch ein Unterschied aufgefallen.
In der
Unit lsaapi.pas von CW sieht der constructor von TLsaUnicodeStr wie folgt aus:
Delphi-Quellcode:
constructor TLsaUnicodeStr.CreateFromStr (const st : string);
var
len : Integer;
wst : WideString;
begin
len := Length (st);
Value.Length := (len + 0) * sizeof (WideChar);
// Value.MaximumLength := (GUIDSTR_MAX + 5) * SizeOf (WideChar);
Value.MaximumLength := (len + 1) * sizeof (WideChar);
GetMem (Value.buffer, sizeof (WideChar) * (len + 1));
wst := st;
lstrcpyw (Value.buffer, PWideChar (wst))
end;
In deinem angehängten Bsp. Source wurde unter anderem folgende Zeilen geändert:
Value.Length := (len + 1) * sizeof (WideChar);
Zitat von
PSDK:
Length
Specifies the length, in bytes, of the string pointed to by the Buffer member, not including the terminating null character, if any.
Somit wäre nach meinem Verständnis der Source von CW völlig korrekt. Wenn du also die
korrekte Länge setzt, funktioniert auch dein Bsp. Programm.