AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion gibt falschen Typ zurück

Ein Thema von R2009 · begonnen am 25. Nov 2010 · letzter Beitrag vom 25. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09:21
Delphi-Version: 5
Hallo DP'ler,

wir haben eine Funktion:
Delphi-Quellcode:
Function INVHEXDW(a:string):int64;
Begin
    If a='then a:='00000000';
    while length(a)<8 do
        a:='0'+a;
    result:= INVHEXB(a[1]+a[2])* 16777216 + INVHEXB(a[3]+a[4]) * 65536 +
             INVHEXB(a[5]+a[6])* 256 + INVHEXB(a[7]+a[8]);
end;

Aufruf mit:
var n:integer;
  begin
    n:=INVHEXDW(a:string):
  end;
Der Funktionsaufruf funktioniert einwandfre solange ich mit meinen Rückgabewert im Wertebereich des integer bleibe. Leider ist dem bei grossen Hex Zahlen nicht so. Beim casten auf n gibts dann einen rangecheck error.
Gibt es irgendeine Möglichkeit aus der aufgerufenen Funktion heraus festzustellen ob der Übergabetyp stimmt oder nicht?
Oder gibt es eine andere Möglichkeit, von der Funktionsseite diesen Fehler zu verhindern?
Es ist mir nicht möglich jeden Aufruf abzuchecken.

Grüsse
rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09:26
Warum gibst Du deiner Var. im Funktionsaufruf nicht einfach eine höhere Wertigkeit.

Delphi-Quellcode:
var n:int64;
  begin
    n:=INVHEXDW(a:string):
  end;
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#3

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09:39
Leider ist dem bei grossen Hex Zahlen nicht so. Beim casten auf n gibts dann einen rangecheck error.
Was erwartest du denn, wenn du einer Variablen einen zu großen Wert zuweist ?
Glückauf
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09:50
Hi,

zumindest erwarte ich eine ordentliche Fehlermeldung. Mir wäre schon geholfen wenn ich das in der Funktion irgendwie abfangen könnte.
Im Moment kriege ich nur die Microsoft Meldung "Schwerer Ausnahmefehler" usw.
Ich habe keine Zeit und auch keine Lust 700000 Zeilen Code durchzusuchen (hat mir ein Vorgänger überlassen)

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09:54
Eingeschaltete Bereichsprüfung Überlauf-Prüfung reicht nicht aus, um eine Exception von Delphi zu werfen?

Der Fehler ist wie schon bemerkt wurde nicht "Funktion gibt falschen Typ zurück", sondern "Funktionsergebnis wird an falschen (zu kleinen Typ) übergeben"

Ich überlege gerade, ob man das Funktionsergebnis nicht auch einfach überladen kann... notfalls halt mit falschen Werten, aber der Fehler liegt ja am Aufrufer, nicht an der Funktion.

Geändert von Satty67 (25. Nov 2010 um 09:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09:55
Hast du Jens' Vorschlag umgesetzt?

INVHEXDW() gibt dir einen Int64 zurück. Den versuchst du einem Int (n) zuzuweisen.

Klar, dass da möglicherweise etwas schief geht.

Edit: Da war ich zu langsam.

Geändert von Matze (25. Nov 2010 um 10:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 10:18
Delphi-Quellcode:
Function INVHEXDW(a:string):int64;
Begin
    If a='then a:='00000000';
    while length(a)<8 do
        a:='0'+a;
    result:= Int64(INVHEXB(a[1]+a[2]))* 16777216 + Int64(INVHEXB(a[3]+a[4])) * 65536 +
             INVHEXB(a[5]+a[6])* 256 + INVHEXB(a[7]+a[8]);
end;
INVHEXB gibt bestimmt ein Byte zurück?
Da dein Delphiprogramm 32 Bit ist, wird standardmäíg maximal mit Integer gerechnet, wenn man nix anderes anibt.

zumindest erwarte ich eine ordentliche Fehlermeldung.
Dann Schalte gefälligst mal die Bereichs- und Überlaufprüfungen an, wenn du diese Fehlermeldungen haben willst.

Und die "langsame"/aufwändige Multiplikation würde ich du eine schöne/einfache Bitverschiebung (shl) ersetzen.

PS: Das IF könnte man sich sparen, da das WHILE diesen Fall mit behandelt.

Delphi-Referenz durchsuchenHexToBin oder Delphi-Referenz durchsuchenStrToInt64 StrToInt64('$0' + a)
$2B or not $2B

Geändert von himitsu (25. Nov 2010 um 10:32 Uhr)
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 11:41
Hi hinmitsu,

ich glaube ich rede chinesisch, zumindest scheint mich hier keiner zu verstehen.

Die Überlaufprüfung ist eingeschaltet.

Trotzdem wirft das Programm mir, wenn es nicht in der IDE läuft, die Microsoft Katastrophemmeldung.

Trotzdem danke für deine Anregungen, werde ich umsetzen.

Aber trotzdem:
ich hatte nicht gefragt wie man das ganze einfacher machen kann, ich will wissen ob man irgenmdwie
den Übergabetyp, der aufrufenden Funktion, feststellen kann.

Grüsse
Rainer
PS: Ist schon blöd wenn man an Programmen rummurksen muss die andere zusammengebastelt haben.
Ich will so wenig wie möglich ändern, ich will nur, dass eine ordentliche Fehlermeldung erscheint.
Und ich will die MS Katastrophe verhindern.
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 12:21
Also tut mir Leid, war mir in Verbindung mit dem Betreff nicht ganz klar, nach welcher Lösung gesucht wird.

ich hatte nicht gefragt wie man das ganze einfacher machen kann, ich will wissen ob man irgenmdwie den Übergabetyp, der aufrufenden Funktion, feststellen kann.
Dachte bis eben dann, Du willst innerhalb der Funktion prüfen, an welchen Typ die Funktion Ihr Ergebnis liefert und entsprechend reagieren. Das geht meines Wissens nach nicht.

Der Quote klingt jetzt aber irgendwie so, als ob außerhalb der Funktion der Übergabetyp ermittelt werden kann (was aber nicht sein kann, weil Du ja nicht den ganzen Quelltext mit den ganzen Aufrufen ändern willst).

Überlaufprüfung klingt für mich immer noch noch dem Kompromiss, der eigentlich funktionieren müsste. Zumindest um die Fehlermeldung wieder von Delphi, statt von Windows ausgeben zu lassen. Evtl. als Compiler-Directive in den Units wieder ausgeschaltet?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 14:33
Trotzallem würde ich die Wertigkeit anpassen. Wenn Du schon weißt, das es zu einem Fehler in dem Fall kommen kann, und Du sogar die Stelle im Programm kennst, gibt es eigendlich als erste nur die Lösung die Var. Ihrem Zweck anzupassen. Fehlermeldung hin oder her.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:09 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