| obbschtkuche hat folgendes geschrieben: |
Eben nicht. Nach dem Aufruf von Uniquestring befindet sich in eax die Speicheradresse des ersten Buchstabens in a/b. (=> entspricht PChar)
Die Speicheradresse der Variablen entspricht aber nicht PChar, wodurch es zu einer AE kommt. |
Oops.. hab den Thread damals ganze vergessen.. das kommt davon wenn man nicht auf seine Emails zugreifen kann..
UniqueString sorgt dafür, dass der String in einen neuen Speicherbereich kopiert wird und der Referenzzähler auf 1 gesetzt wird. Das ist bei APIs notwendig die Daten im übergeben String ablegen, denn wenn mehrere Strings dieselbe Zeichenkette referenzieren (Referenzzäher > 1), dann werden alle diese Strings von einer Änderung beeinflusst!
Probier mal folgenden Aufruf:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var s: String;
s := 'Test'; MessageBox(Pointer(s), Pointer(s), 0); |
und schau mal was der Compiler daraus macht... was für eine Überraschung, er pusht nur die Adresse auf die der String s zeigt, denn ein Delphi-String ist bereits ein Zeiger auf eine Zeichenkette, so wie ein PChar!
Ich bin gerade dabei ein Tutorial über Strings, die String-Internals und alles möglicher rundherum zu schreiben... da steht das auch in allen Details drinnen beschrieben...!