Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi fmod problem? (https://www.delphipraxis.net/46622-fmod-problem.html)

punker76 28. Mai 2005 12:19


fmod problem?
 
hallo

hab mit fmod meinen eigenen player programmiert:

siehe freeware forum: mein thread unter freeware

hab aber tierische probleme.
irgendwie hab ich ein brett vorm kopf. ich verstehe einfach nicht, warum mein player unter windows 2000
mit der funktion "TRUNC" nicht zurechtkommt.
wenn man meinen player auf "direct sound" einstellt, bekomme ich einen fehler (ungültige gleitkommaoperation).
aber halt nur unter win 2000!!!
was soll aber an so einem wert falsch sein "212,00" ???
ich weiss echt nicht mehr weiter.
hab nun um alle TRUNC's ein try except und schreibe die stelle in ein log file.

hängt das vielleicht mit fmod zusammen? dort wird im initialization teil die exception eigentlich ausgeschaltet.
Delphi-Quellcode:
var
  Saved8087CW: Word;

{$ifdef FPC} //FPC do not have this function in its RTL
const
  Default8087CW = $1332; //according to the FPC site it's the value used in the

                         //startup code.
procedure Set8087CW( value :word ); Assembler;
asm
   FLDCW value
end;
{$endif}


initialization
  { Save the current FPU state and then disable FPU exceptions }
  Saved8087CW := Default8087CW;
  Set8087CW($133f); { Disable all fpu exceptions }

finalization
  { Reset the FPU to the previous state }
  Set8087CW(Saved8087CW);
kann mir jemand weiterhelfen?

s.h.a.r.k 28. Mai 2005 12:52

Re: fmod problem?
 
hast du auch nen code, wo der trunc befehl einen fehler ergibt?!

punker76 28. Mai 2005 13:17

Re: fmod problem?
 
Zitat:

Zitat von s.h.a.r.k
hast du auch nen code, wo der trunc befehl einen fehler ergibt?!

zum bleistift 1:
Delphi-Quellcode:
dCurrentR:= 212.2
dCurrentG:= 212.2
dCurrentB:= 212.2
Canvas.Brush.Color := rgb(trunc(dCurrentR), trunc(dCurrentG), trunc(dCurrentB));
zum bleistift 2:
Delphi-Quellcode:
function getTimeDblSecStr (ATimeSec: Double): string;
var
  i   : integer;
begin
  try
    i:= TRUNC (ATimeSec);
  except
    GlobalData. SaveToFehlerLog ('TRUNC Fehler getTimeDblSecStr!');
    Result:= '0:00';
    EXIT;
  end;
  Result:= getTimeSecStr (i*1000); // wandelt integer in string um: 05:00 zum bsp
end;

turboPASCAL 28. Mai 2005 13:31

Re: fmod problem?
 
Hi, Schon mal mit Round versucht ob es da auch Fehler gibt oder ist es zu ungenau ?

punker76 28. Mai 2005 13:57

Re: fmod problem?
 
Zitat:

Zitat von turboPASCAL
Hi, Schon mal mit Round versucht ob es da auch Fehler gibt oder ist es zu ungenau ?

also ich hab es ausprobiert. leider hilft es nur bedingt. (danke trotzdem für den tipp)
wenn ich das succesive mache, kommt der fehler bei der zuvor aufgerufenen TRUNC funtion.
anscheinend passiert der fehler immer bei der letzten ausgeführten TRUNC funktion.

leider ist es auch nicht hilfreich jetzt alle TRUNC's durch ROUND's zu ersetzen, da an einigen stellen
dies zu ungenau ist.

ich hoffe nicht, dass das ein compilier problem ist.
hab meinen player unter win xp prof sp2 compiliert mit delphi 5 ent.


tschau

turboPASCAL 28. Mai 2005 14:20

Re: fmod problem?
 
Versuch mal Int64 und nicht Integer ( function Trunc(X: Extended): Int64 )

punker76 28. Mai 2005 15:16

Re: fmod problem?
 
Zitat:

Zitat von turboPASCAL
Versuch mal Int64 und nicht Integer ( function Trunc(X: Extended): Int64 )

unter windows xp keine änderung, immer noch der gleiche fehler.

wenn ich diese änderung mache und dann unter win 2000 compiliere geht's. ist aber erlich gesagt, nicht
das was ich will. ich möcht nicht tausend betriebssystem haben und dann jeweils darunter compilieren. :coder:

was ist denn zwischen Int64 (win xp) unt Int64 (Win 2000) unterschiedlich? :gruebel:



so: nu is aber für heut schluss, ab in den biergarten und fussball schauen! :cheers:

turboPASCAL 28. Mai 2005 15:30

Re: fmod problem?
 
Tja... ?

Was gibt Delphi denn für Fehlermeldung beim ausfhüren?

Fehler mit einer EInvalidOp-Exception abfangen ?!

punker76 29. Mai 2005 00:22

Re: fmod problem?
 
Zitat:

Zitat von turboPASCAL
Tja... ?

Was gibt Delphi denn für Fehlermeldung beim ausfhüren?

Fehler mit einer EInvalidOp-Exception abfangen ?!

beim ausführen gibts keine fehlermeldungen und keine warnmeldungen.
die EInvalidOp fang ich ja auch schon ab.
ich weiss auch nicht mehr weiter.

ich werde glaube ich auch mal im fmod forum posten, da ich den verdacht habe, dass es an fmod liegt.

trotzdem danke!

punker76 29. Mai 2005 09:16

Re: fmod problem?
 
so ich hab jetzt mal im fmod forum gestöbert und das hier gefunden, was mir auch weitergeholfen hat.
verstehen kann ich es trotzdem nicht.

FMOD Forum: Undoing the Set8087CW Setting

was ist denn zwischen der delphi funktion und der im forum geposteten anders (versteh leider nicht so viel assembler).

Delphi TRUNC:
Delphi-Quellcode:
function Trunc(X: Extended): Int64;

const cwChop : Word = $1F32;

procedure      _TRUNC;
asm
        { ->   FST(0)  Extended argument      }
        { <-    EDX:EAX Result                 }

        SUB    ESP,12
        FSTCW  [ESP]
        FWAIT
        FLDCW  cwChop
        FISTP  qword ptr [ESP+4]
        FWAIT
        FLDCW  [ESP]
        POP    ECX
        POP    EAX
        POP    EDX
end;
gepostete TRUNC
Delphi-Quellcode:
const
  // FPU status flags (high order byte)
  cwChop : Word = $1F3F;

function Trunc64(v : Extended) : Int64; register;
asm
      SUB    ESP,12
      FSTCW  [ESP]
      FLDCW  cwChop
      FLD    v
      FISTP  qword ptr [ESP+4]
      FLDCW  [ESP]
      POP    ECX
      POP    EAX
      POP    EDX
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 Uhr.
Seite 1 von 2  1 2      

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