Seite 1 von 2

dll Funktion soll float an pb übergeben

Verfasst: 01.09.2005 16:47
von ChrisB
Hallo.
Ich habe hier eine c++ dll die mir bei einer Funktion ein float wert zurückgibt. Aber Irgendwie bekomm ich bei CallFunction() kein float sondern nur long.

Nach ein bisschen suchen bin ich im Forum auf dieses CodeSchnippsel gestoßen:

Code: Alles auswählen

retvalue=CallFunction(0,"getVertX") 
float.f = PeekF( @RetValue)
Doch auch da kommt nur Käse raus.

Hat jemand ne Idee woran das liegen könnte?
Danke.

Re: dll Funktion soll float an pb übergeben

Verfasst: 01.09.2005 17:01
von Leo

Code: Alles auswählen

retvalue=CallFunction(0,"getVertX") 
float.f = PeekF(RetValue)

Re: dll Funktion soll float an pb übergeben

Verfasst: 01.09.2005 17:09
von DarkDragon
Leo hat geschrieben:

Code: Alles auswählen

retvalue=CallFunction(0,"getVertX") 
float.f = PeekF(RetValue)
Hab ich ihm schon vorgeschlagen, klappt anscheinend auch nicht.

Verfasst: 01.09.2005 17:13
von remi_meier
Ev. so?

Code: Alles auswählen

Procedure.f test(x.f)
	ProcedureReturn x
EndProcedure

*p = @test()

n.f
CallFunctionFast(*p, 1.023)
!FSTP dword[v_n]
Debug n
Also ein FSTP dword[v_VARNAME].

Verfasst: 01.09.2005 17:56
von ts-soft
Oder so?

Code: Alles auswählen

Procedure VertX()
  CallFunction(0,"getVertX")
  ProcedureReturn 
EndProcedure

Float.f = VertX()

Verfasst: 01.09.2005 18:02
von DarkDragon
ts-soft hat geschrieben:Oder so?

Code: Alles auswählen

Procedure VertX()
  CallFunction(0,"getVertX")
  ProcedureReturn 
EndProcedure

Float.f = VertX()
Wenn dann Procedure.f

Verfasst: 01.09.2005 18:02
von hardfalcon
ts-soft hat geschrieben:Oder so?

Code: Alles auswählen

Procedure VertX()
  CallFunction(0,"getVertX")
  ProcedureReturn 
EndProcedure

Float.f = VertX()
Wie soll das denn funktionieren? Hinter ProcedureReturn steht doch gar nix! :?

Verfasst: 01.09.2005 18:04
von DarkDragon
hardfalcon hat geschrieben:
ts-soft hat geschrieben:Oder so?

Code: Alles auswählen

Procedure VertX()
  CallFunction(0,"getVertX")
  ProcedureReturn 
EndProcedure

Float.f = VertX()
Wie soll das denn funktionieren? Hinter ProcedureReturn steht doch gar nix! :?
Die Werte bleiben im EAX.

Verfasst: 01.09.2005 18:11
von hardfalcon
Sooo weit kann ich ja gar nicht mehr logisch nachdenken... Noch dazu mit meinem praktisch nicht vorhandenen ASM-Skill... :(

Verfasst: 01.09.2005 18:17
von ts-soft
hardfalcon hat geschrieben:Sooo weit kann ich ja gar nicht mehr logisch nachdenken... Noch dazu mit meinem praktisch nicht vorhandenen ASM-Skill... :(
Mit ProcedureReturn packste das Ergebnis auf dem Stack, manche DLLs legen es aber bereits dahin, so das Du den Stack nicht mehr verändern darfst um an das Ergebnis zu gelanden. Naja, so ungefähr