07. december 2003 - 14:54Der er
8 kommentarer og 1 løsning
TMemoryStream.Size = 0 efter jeg har brugt Write-proceduren
Hej Eksperter!
Jeg skal sende noget buffer via UDP, og har valgt at smide alt det der skal sendes ind i en TMemoryStream, hvorefter jeg bruger SendBuffer i UDP-komponenten. Til at skrive til TMemoryStream'et bruger jeg Write-proceduren...
Jeg vil gerne kunne opnå at have alt buffer inde i TMemoryStream.Memory^, men den er i følge Delphi tom, og TMemoryStream.Size = 0. Hvorfor det!?
Her er lidt kode:
var Stream: TMemoryStream; BufferInt: Integer; begin Stream := TMemoryStream.Create; BufferInt := 214322; Stream.Write(BufferInt, SizeOf(BufferInt)); UDP.SendBuffer(Host, DefaultPort, Stream.Memory^, Stream.Size); Stream.Free; end;
Okay... Mystisk!! Hvis jeg bruger ShowMessage(IntToStr(Stream.Size)); så viser den rigtigt nok 4, men hvis jeg markerer Stream.Size og trykker Ctrl+F7 i runtime, så viser den 0!?
problemet er at Stream.Memory er en untyped pointer. Du ved med andre ord ikke hvad den peger på. Derfor giver det ikke mening at skrive Stream.Memory^ fordi der beder du om det som Stream.Memory peger på.
Du skal i stedet for have fat i en typed pointer. i dit tilfælde hvor du skal bruge en integer pointer. (PInt)
Så prøv det her : UDP.SendBuffer(Host, DefaultPort, pInt(Stream.Memory)^, Stream.Size);
>>Jens Jeg har heldigvis fået løst problemet, men jeg undrer mig stadig over at Stream.Size ikke kan vises rigtigt under Evaluate/Modify. Hvis jeg smider den ind i en ShowMessage kommer den fint nok ud med det rigtige tal, men kigger jeg på den fra Delphi under Runtime (med Evaluate/Modify, Ctrl+F7), så viser den 0!! Hvorfor??
Grunden til at det virker er at det er en integer du peger på .. så går det godtt .. Havde det været et stykke dynanmisk hukommelse så havde sagen været anderledes
Okay... Det skal lige siges at det ikke bare er en integer jeg peger på... Koden i spørgsmålet var blot et eksempel... Det jeg sender ud er 63 bytes stort, og kan variere!!
I midlertid er jeg stødt på et helt andet problem, men det må vist blive til et andet spørgsmål... :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.