delphi dll mit single rückgabewert?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Xception
Beiträge: 16
Registriert: 16.09.2004 21:31

delphi dll mit single rückgabewert?

Beitrag von Xception »

Ist single in Delphi nicht das gleiche wie float in Purebasic?
Haben beide 4 bytes.
Wenn ich aber single an Purebasic zurückgebe erhalte ich immer eine riesige merkwürdige Zahl, auch wenn ich eine ganz kleine zurückgebe.
Integer funktioniert problemlos.
QuickBasic
Beiträge: 75
Registriert: 11.09.2004 12:54

Beitrag von QuickBasic »

Hier mal ein Auszug aus der Delphi Hilfe:

Code: Alles auswählen

Realtypen
Ein Realtyp ist eine Untermenge der reellen Zahlen, die als Gleitkommazahl mit einer festen Stellenanzahl dargestellt werden können.
Es gibt fünf Arten von Realtypen. Sie unterscheiden sich in ihrem Wertebereich, der Genauigkeit der Werte und im Speicherplatzbedarf.


Typ	              Bereich	                                      Stellen	Bytes

Real                  2.9 * 10-39 .. 1.7 * 1038	               11-12      6

Single               1.5 * 10-45 .. 3.4 * 1038	                7-8	   4

Double              5.0 * 10-324 .. 1.7 * 10308	           15-16       8

Extended           3.4 * 10-4932 .. 1.1 * 104932	19-20	   10

Comp                -263+1 .. 263-1	                       19-20	   8

Der Typ Comp speichert nur integrierteWerte von-263+1 bis 263-1 (näherungsweise -9.2 * 1018 bis 9.2 * 1018).
Delphi unterstützt zwei Modelle der Code-Erzeugung, um Operationen mit Realtypen durchzuführen: 

Gleitkommaberechnungen per Software 
	80x87 Gleitkommaberechnungen 

Verwenden Sie die Compileranweisung $N, um das entsprechende Modell auszuwählen.
Und hier eine Definition von Float, ob die allerdings auch für PB
Gültigkeit hat, weiss ich nicht, je nachdem definiert hier jeder
Hersteller seinen ganz "eigenen" Float-Typ

(Ausschnitt aus der Turbo C++- Hilfe)

Code: Alles auswählen

float	32 Bits 	3.4 * (10**-38) bis 3.4 * (10**+38)
Soweit ich das sehe, besteht hier durchaus ein Unterschied, es kommt
darauf an, WIE die Kommazahlen CompilerIntern verarbeitet werden,
und wenn die Verarbeitung GLEICH ist, dann klappts, ansonsten gibts
Probleme, mit der Typgröße hat DAS nichts zu tun!
FloHimself
Beiträge: 338
Registriert: 05.09.2004 18:47

Beitrag von FloHimself »

Unabhängig von den unterschiedlichen Wertebereichen, werden in Delphi Funktionsergebnisse der Real-Typen im Top-of-Stack-Register des Coprozessors für Gleitkommazahlen (ST(0)) zurückgegeben.

Probier es mal hiermit:

Code: Alles auswählen

RetValue.f = 0.0
CallFunction(0, "GetSingle")
!FST [v_RetValue]
Debug RetValue
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Ich vermute das Problem ist hier das CallFunction(Fast) ein
Long zurückgibt. Dieses Long muß man erst speichern und
dann in ein Float ziehen:

Code: Alles auswählen

retval = CallFunction(...)
float.f = PeekF( @retval )
Oder:

Code: Alles auswählen

float.f = 0.0
CallFunction(...)
!MOV [v_float], EAX
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten