Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StrAlloc verstehen (https://www.delphipraxis.net/96915-stralloc-verstehen.html)

thkerkmann 1. Aug 2007 15:48

Re: StrAlloc verstehen
 
Zitat:

Zitat von Neutral General
Ja gut was passiert hab ich jetzt verstanden aber der String könnte doch überall im Speicher sein.. Wieso zeigt Result standardmäßig schon am Anfang der Procedure (oder spätestens nach GetMem) auf das erste Zeichen des Strings ? (Müsste ja nach meinem Verständnis).

Wisst ihr was ich meine?

Nee, der zeigt noch nicht auf deinen string....
StrAlloc hat erst mal nur Platz geholt - Du musst jetzt noch was reinschreiben.

Delphi-Quellcode:
  result := DragQueryFile(Msg.WParam, i , Filename, 0);
Gruss

sirius 1. Aug 2007 15:49

Re: StrAlloc verstehen
 
Zitat:

Zitat von Christian Seehase
Schon, aber ein PChar braucht auch keine Länge... ;-)

Bei Delphi schon. Denn dadurch kannst du einfach StrDispose(myPchar) machen, ohne dir die Länge gemerkt zu haben. Ist quasi ein "advanced PChar".

Edit: Und wenn du den PChar an C übergibst, meckert C auch nicht, wenn vor dem *Char noch ein Longint steht, welches die Länge des *Chars anzeigt (falls es voll gefüllt ist)

Neutral General 1. Aug 2007 16:01

Re: StrAlloc verstehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Christian Seehase
Moin Michael,

mit GetMem wird der Speicher reserviert, und die Adresse dieser Reservierung in Result abgelegt.

Jaa aber wie kommen die Zeichen darein? Moment ich male euch mal was...

sirius 1. Aug 2007 16:03

Re: StrAlloc verstehen
 
Nach strAlloc liegt da auch nur Müll. Meist irgendetwas was du grad zuvor gemacht hast.

xaromz 1. Aug 2007 16:04

Re: StrAlloc verstehen
 
Hallo,

was meinst Du mit "wo der String schon drinsteht"? Da steht ja nirgends ein String. Du hast nur Speicher allokiert, der dann zur Speicherung eines Strings verwendet werden kann. Wenn Du also mit StrAlloc() Speicher anforderst, dann musst Du danach auch noch was damit machen...

Gruß
xaromz

Neutral General 1. Aug 2007 16:05

Re: StrAlloc verstehen
 
Ehm hat sich erledigt.
Hab jetzt gerade zum Schluss folgende Zeile vergessen:

Delphi-Quellcode:
DragQueryFile(Msg.WParam,i , Filename, size);
Das erklärt dann den Rest... Danke an euch alle ;)

Gruß
Neutral General

jbg 1. Aug 2007 17:43

Re: StrAlloc verstehen
 
Zitat:

Zitat von sirius
Bei Delphi schon. Denn dadurch kannst du einfach StrDispose(myPchar) machen, ohne dir die Länge gemerkt zu haben. Ist quasi ein "advanced PChar".

Falsch. Die 4 Bytes davor stammen noch von Turbo/Borland Pascal. Dort musste man bei FreeMem noch die Allozierungsgröße angeben. StrAlloc/StrDispose arbeitet nur so, weil es abwärts kompatibel ist, wie man an StrDispose mit dem FreeMem(P, Size) sieht. Die Länge für FreeMem kennt der Speichermanager selbst, da er diese Information selbst verwaltet, ggf. sogar direkt vor dem Reservierten Speicherbereich, wodurch folgendes entsteht:
[MemSize: 4 Bytes][Size: 4 Bytes][Data: (Size - 4) Bytes]


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz