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
Benutzerbild von Matze
Matze
(Co-Admin)

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

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 08: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 09:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 09: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)
Ein Therapeut entspricht 1024 Gigapeut.

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

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

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 10: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
 
#4

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 11: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
 
#5

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 13: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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

AW: Funktion gibt falschen Typ zurück

  Alt 25. Nov 2010, 14:10
Ist schon blöd wenn man an Programmen rummurksen muss die andere zusammengebastelt haben. Ich will so wenig wie möglich ändern...
Tja, das ist das tägliche Brot der Programmierer.
Aber du hast geistig die falsche Einstellung.
Du hast einen Haufen an minderwertigem Sourcecode geerbt, mit Fehlern und manchmal auch recht schwer zu lesen; eben ein Brownfield Projekt.

Dein Vorgänger hat vielleicht "gebastelt", aber das heisst nicht, dass du jetzt "murksen" darfst.


Es bleibt dir nichts anderes übrig als die K...e aufzuräumen.
Dazu beginnt man am Besten ganz unten bei einfachen Funktionen.
Bottom-Up-Redesign

Die Funktion INVHEXDW() ist dazu ein gutes Beispiel.
Anstatt nach einer Fehlermeldung zu suchen, nimmst du die Funktion (+abhängige Funktion INVHEXB) raus in ein kleines Testprojekt.
Dort wird sie solange getestet und verbessert bis sie 100% funktioniert.
Auf diese Art wird das Projekt auf ein solideres Fundament gestellt und du verstehst den Code immer besser.
Andreas

Geändert von shmia (25. Nov 2010 um 15:11 Uhr)
  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 06:37 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-2025 by Thomas Breitkreuz