Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Funktion mit Buffer ohne Typ übergibt falschen Pointer (https://www.delphipraxis.net/125906-funktion-mit-buffer-ohne-typ-uebergibt-falschen-pointer.html)

gsh 14. Dez 2008 16:43


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 http://www.delphipraxis.net/internal...t.php?t=147934 umgebaut. Da dieses Problem aber nicht mehr viel mit dem eigentlichen Thread zu tun hat schreibe ich einen neuen dafür:

Ich rufe die Buffer Write Funktion
Delphi-Quellcode:
function TTransferBuffer.Write(const Buffer; Count: integer): integer;
so auf:
Delphi-Quellcode:
TempMemory.CopyFrom(vAktFileStream, cTransferBufferReadSize);
TempMemory.Position := 0;
vCSBuffer.Enter;
try
  Self.Write(TempMemory, TempMemory.Size); // Self ist der Transferbuffer
finally
  vCSBuffer.Leave;
end;
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).

Aber in der eigentliche Write funktion bekomme ich einen ganz anderen Pointer
Delphi-Quellcode:
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;
bei beiden varianten bekomme ich eine AV. Was auch verständlich ist den an dieser Pointer Position steht nur "müll".


Warum kommt bei der Funktion ein ganz anderer Pointer raus? :wiejetzt:

Dax 14. Dez 2008 16:46

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.

Apollonius 14. Dez 2008 16:46

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.

gsh 14. Dez 2008 17:06

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:
Self.Write(TempMemory.Memory, TempMemory.Size);
TempMemory.Memory = $32F27C0

Doch in der Funktion erhalte ich immer noch einen falschen Wert:
Address = $CE3CF4

:wall:

Apollonius 14. Dez 2008 17:11

Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
 
Ich habe schon einmal geschrieben, dass du TempMemory.Memory^ übergeben sollst.

gsh 14. Dez 2008 17:26

Re: Funktion mit Buffer ohne Typ übergibt falschen Pointer
 
Zitat:

Zitat von Apollonius
Ich habe schon einmal geschrieben, dass du TempMemory.Memory^ übergeben sollst.

mhm dannke der fehler ist mir nach dem ersten debuggen auch aufgefallen
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 06:22 Uhr.

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