dll Funktion soll float an pb übergeben

Für allgemeine Fragen zur Programmierung mit PureBasic.
ChrisB
Beiträge: 5
Registriert: 01.09.2005 16:40
Kontaktdaten:

dll Funktion soll float an pb übergeben

Beitrag 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.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Re: dll Funktion soll float an pb übergeben

Beitrag von Leo »

Code: Alles auswählen

retvalue=CallFunction(0,"getVertX") 
float.f = PeekF(RetValue)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: dll Funktion soll float an pb übergeben

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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].
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Oder so?

Code: Alles auswählen

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

Float.f = VertX()
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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! :?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Sooo weit kann ich ja gar nicht mehr logisch nachdenken... Noch dazu mit meinem praktisch nicht vorhandenen ASM-Skill... :(
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten