Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 26.02.06 18:03 
Hi!

Ein seltsames Problem, das ich da habe. Wollte eines meiner Programme etwas umbauen und habe nun PChars mit dabei. Da andere Programmteile Strings verwenden, muss ich die PChars in Strings umwandeln - soweit kein Problem. StrPas schreibt mir die Delphihilfe ist veraltet - ich solle doch eine Direktzuweisung verwenden. Ich habe folgende Möglichkeiten ausprobiert (auskommentiert):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
      HR_REQUIRES_STATUS_CHANGE: begin
                                   if AnOutput.DataFormat = DF_STATUS_INFORMATION then
//                                     FState := AnOutput.AdditionalData;
//                                     FState := String(AnOutput.AdditionalData);
//                                     FState := Copy(AnOutput.AdditionalData, 1, Length(AnOutput.AdditionalData));
                                     FState := StrPas(AnOutput.AdditionalData);
                                 end;


Das Problem ist folgendes: AdditionalData ist ein PChar, z.B. mit dem Inhalt "F:\Bilder"; vor der Zuweisung ist das auch noch ok; nach der Zuweisung allerdings ist der Inhalt "F:\Bilde"#0 (laut Debugger) - und so wird es dann auch ausgegeben. Interessanterweise passiert das nur, sobald irgendwann einmal "F:\" in AdditionalData steht bzw. gestanden ist (d.h. ich <= 3 Zeichen bin). Davor ist alles normal - danach fehlt immer genau das letzte Zeichen... weiß jemand, wie ich das beheben kann?

AXMD

PS. Crossposting DP
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Mo 27.02.06 16:06 
user profile iconAXMD hat folgendes geschrieben:
Das Problem ist folgendes: AdditionalData ist ein PChar, z.B. mit dem Inhalt "F:\Bilder"; vor der Zuweisung ist das auch noch ok; nach der Zuweisung allerdings ist der Inhalt "F:\Bilde"#0 (laut Debugger) - und so wird es dann auch ausgegeben.
Das heißt, der Inhalt von AdditionalData wird verändert? Oder meintest Du den Inhalt des Strings FState?

Ich würde die Direktzuweisung (FState := AnOutput.AdditionalData) präferieren (die CompilerMagic ermittelt dann die Länge des nullterminierten Strings, reserviert den Speicher für FState und kopiert die Zeichen rüber) und darauf tippen, dass etwas mit AdditionalData nicht stimmt. Ist es immer korrekt nulltermiert?

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.