AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Typenlosen Datentyp an Funktion übergeben => size = 0
Thema durchsuchen
Ansicht
Themen-Optionen

Typenlosen Datentyp an Funktion übergeben => size = 0

Ein Thema von ichbins · begonnen am 27. Okt 2005 · letzter Beitrag vom 27. Okt 2005
Antwort Antwort
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#1

Typenlosen Datentyp an Funktion übergeben => size = 0

  Alt 27. Okt 2005, 18:27
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
  byte als buf übergebe, müsste sizeof(buf) ja eigentlich 1 sein 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?
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Typenlosen Datentyp an Funktion übergeben => size = 0

  Alt 27. Okt 2005, 18:36
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Typenlosen Datentyp an Funktion übergeben => size = 0

  Alt 27. Okt 2005, 18:41
aha, aber dann müsste ja das system.blockread funktionieren?
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Typenlosen Datentyp an Funktion übergeben => size = 0

  Alt 27. Okt 2005, 19:15
du meinst bestimmt system.blockwrite
Wie rufst du denn deine funktion auf (mit dem Byte)? Welchen Wert übergibst du für bytecount?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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