AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Integer wert als Float interpretieren
Thema durchsuchen
Ansicht
Themen-Optionen

Integer wert als Float interpretieren

Ein Thema von freepinguin · begonnen am 25. Jan 2010 · letzter Beitrag vom 25. Jan 2010
Antwort Antwort
freepinguin

Registriert seit: 25. Jan 2010
3 Beiträge
 
#1

Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:11
Hallo erst einmal

ich bin hier neu und hoffe im Richtigen Forum gelandet zu sein

also mein Problem ist ich bekomme über eine Windows Nachricht aus einer Dll ein Ereignis mitgeteilt in diesem ist im parameter Msg.lParam (integer) ein messwert codiert der von der DLL als Float geschrieben wird.

Wie lann ich nun diesen wert in delphi auch als Float behandeln

ich habe mit eine Funktion geschrieben

Delphi-Quellcode:
function LongToFreq(lParam : Integer):Float;
var
  fFloat : pointer;
begin
  fFloat:=@lParam;
  result:=float(fFloat^);
end;
und so sieht der Aufruf aus
Delphi-Quellcode:
procedure TDT30xRPM.do_Done(var MSG : TMessage);
begin
  fRPM:=LongToFreq(msg.LParam);
end;
nun erhalte ich in der Var fRPM den wert 0 obwohl result auf einem anderen Wert steht

was mache ich falsch

schöne grüße vom bodensee
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:13
Delphi beherrscht eine implizite Typumwandlung. Weise dem Floatwert einfach den Integerwert zu:
Delphi-Quellcode:
Var
  DoubleNumber : Double;
  IntegerNumber : Integer;

Begin
  Integernumber := 30;
  DoubleNumber := IntegerNumber;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:22
Bei Messages geht es ganz einfach. Du definierst nur einen eigenen Record, der bspw. so aussieht:
Delphi-Quellcode:
type TSpecialMessage = packed record
       Msg: Cardinal;
       WParam:LongInt;
       Messwert:Single;
       Result:LongInt;
     end;
Und denn verwendest du in Do_Done.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:25
Ah... ich hatte den Beitrag gar nicht richtig gelesen.

Die Lösung von Sirius müsste die richtige sein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#5

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:25
ich biete mapping auf eine Longvariable.

Delphi-Quellcode:
procedure TDT30xRPM.do_Done(var MSG : TMessage);
var
  buf: longint;
  f: single absolute buf;
begin
  buf := msg.LParam;
  fRPM:= f;
end;
alternativ gibts eine Wurst von typecasts (durch den Umweg über Pointer streift man die Typisierung ab):

fRPM := Single(Pointer(Addr(msg.lParam))^);
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#6

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:29
Hallo,

@alzaimar:
die implizite Typumwandlung klappt hier nicht, da der Wert tatsächlich ja ein 32bit-Float ist und kein 32bit-Integer.

Ich würde entweder
a) mit dem Move-Befehl arbeiten
oder
b) mit einem Variant record:
Delphi-Quellcode:
type
  TIntOrFloat = record
  case IsFloat: boolean of
    true: (FloatValue: Single);
    false: (IntValue: Integer);
end;
...
var
  MyIntOrFloat: TIntOrFloat;
begin
  MyIntOrFloat.IntValue := lParam;
  MyFreq := MyIntOrFloat.FloatValue;
end;
Hier aber Achtung auf Typsicherheit für künftige 64-Bit Compiler (Integer dann 64bittig...?!).

Gruß
blauweiss
  Mit Zitat antworten Zitat
freepinguin

Registriert seit: 25. Jan 2010
3 Beiträge
 
#7

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:30
Danke für die schnelle hilfe habe das mit der TSpecialMessage gemacht werde aber das mapping auch noch versuchen da es mir fexibler erscheint
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:37
Die SpecialMessage-Variante ist der normale Weg, wie es die gesamte VCL macht (schau mal in die Unit Messages, was da so alles deklariert ist).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
freepinguin

Registriert seit: 25. Jan 2010
3 Beiträge
 
#9

Re: Integer wert als Float interpretieren

  Alt 25. Jan 2010, 16:39
Hallo sirius

werde ich gleich mal reinschauen.

mfg
  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 02: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