![]() |
Funktion mit Buffer ohne Typ übergibt falschen Pointer
Hi Leute
ich habe leider mal wieder ein Problem. Ich habe meine Klasse wie in dem Thread ![]() Ich rufe die Buffer Write Funktion
Delphi-Quellcode:
so auf:
function TTransferBuffer.Write(const Buffer; Count: integer): integer;
Delphi-Quellcode:
Soweit funktioniert alles. Ich habe die Adresse (TempMemory.Memory) mit einem RAM-Editor überprüft und dort stehen auch die ersten 20480 Bytes von der Datei (cTransferBufferReadSize = 20480).
TempMemory.CopyFrom(vAktFileStream, cTransferBufferReadSize);
TempMemory.Position := 0; vCSBuffer.Enter; try Self.Write(TempMemory, TempMemory.Size); // Self ist der Transferbuffer finally vCSBuffer.Leave; end; Aber in der eigentliche Write funktion bekomme ich einen ganz anderen Pointer
Delphi-Quellcode:
bei beiden varianten bekomme ich eine AV. Was auch verständlich ist den an dieser Pointer Position steht nur "müll".
function TTransferBuffer.Write(const Buffer; Count: integer): integer;
var Address : Pointer; begin Address := Addr(Buffer); Move(Address, vData, Count); end; function TTransferBuffer.Write(const Buffer; Count: integer): integer; begin Move(Buffer, vData, Count); end; Warum kommt bei der Funktion ein ganz anderer Pointer raus? :wiejetzt: |
Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
TMemoryStream (das ist, vermute ich, TempMemory) ist eine Klasse! Irgendwo hat das Ding aber einen Pointer, der auf die Daten zeigt. Den musst du da verwenden.
|
Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
Du musst TempMemory.Memory^ übergeben. Sonst übergibst du die Adresse des Streams, nicht die Adresse der Daten.
|
Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
Sry habe ich vergessen zu schreiben. TempMemory : TMemoryStream;
Habe es jetzt auf geändert:
Delphi-Quellcode:
TempMemory.Memory = $32F27C0
Self.Write(TempMemory.Memory, TempMemory.Size);
Doch in der Funktion erhalte ich immer noch einen falschen Wert: Address = $CE3CF4 :wall: |
Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
Ich habe schon einmal geschrieben, dass du TempMemory.Memory^ übergeben sollst.
|
Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
Zitat:
hab es jetzt geändert und es scheint zu funktionieren Mensch und an dem sch*** problem bin ich jetzt 4 Tage gehockt :wall: Danke :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
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 by Thomas Breitkreuz