Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typenlosen Datentyp an Funktion übergeben => size = 0 (https://www.delphipraxis.net/55837-typenlosen-datentyp-funktion-uebergeben-%3D-size-%3D-0-a.html)

ichbins 27. Okt 2005 18:27


Typenlosen Datentyp an Funktion übergeben => size = 0
 
hi,

ich hab folgende Funktion geschrieben

Delphi-Quellcode:
function tfile.blockwrite(const buf; bytecount:integer):integer;
var
  written:integer;
begin
  showmessage('Towrite: '+inttostr(bytecount)+' Bufsize: '+inttostr(sizeof(buf)));
  system.BlockWrite(executor,buf,bytecount,written);
  showmessage('überstanden');
  result:=written;
end;
wenn ich jetzt ein
Delphi-Quellcode:
  byte
als buf übergebe, müsste sizeof(buf) ja eigentlich 1 sein :gruebel: Im Message zeigt er mir aber 0 an. Das Message "überstanden" erscheint nicht, folglich muss der Fehler also im system.blockwrite auftreten. Is ja auch logisch, da BUF die Size of 0 hat...

Was mach ich da falsch?
:coder2:

SirThornberry 27. Okt 2005 18:36

Re: Typenlosen Datentyp an Funktion übergeben => size = 0
 
SizeOf wird nicht zur Laufzeit ausgeführt sondern vom Compiler ersetzt. Wenn du keinen Typ angibst kann sizeof(der Compiler) natürlich auch keine Größe ermitteln. Und zur Laufzeit das ganze ermitteln geht auch nicht da ein untypisierter Parameter nix weiter als ein Pointer ist.
Aus diesem Grund haben solche funktionen auch fast immer einen weiteren Parameter der die Größe angibt. Zum Beispiel bei TStream.Read und TStream.Write ist der erste Parameter typenlos und der zweite gibt die size an.

ichbins 27. Okt 2005 18:41

Re: Typenlosen Datentyp an Funktion übergeben => size = 0
 
aha, aber dann müsste ja das system.blockread funktionieren?

SirThornberry 27. Okt 2005 19:15

Re: Typenlosen Datentyp an Funktion übergeben => size = 0
 
du meinst bestimmt system.blockwrite
Wie rufst du denn deine funktion auf (mit dem Byte)? Welchen Wert übergibst du für bytecount?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 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