Deutsch
DLLs

SPIT3 (Evaluator)

 

Daniel
Hoffmann
Hi Leute
Ich schreibe gerade an einer kleinen, aber feinen DLL und will die Profan-kompatibel machen. Weiß jemand, was ich da für Aufruf- und Namenskonventionen einhalten muss? Reicht es, alle Funktionen als __stdcall mit undekorierten Namen zu exportieren? Das wäre ned schlecht
So, mal schnell eine kurze Zusammenfassung zu SPIT3: Es ist eine Art Taschenrechner, ähnlich der bekannten DLL Parcival von Jacob Liebeck. Ich bin einen anderen Weg bei der Auswertung gegangen als er, und nun hat er einen sehr vielseitigen Parser. Im Gegensatz dazu bin ich auf Geschwindigkeit gegangen. Das führte dazu, dass SPIT3 in seinem aktuellen Stand die Funktion cos(sqrt(x^2+y^2)) mit einer Auflösung von 401*401 Punkten auf meinem Centrino 1.3GHz-Notebook innerhalb von etwa 1.2s berechnet. Parcival benötigt für dieselbe Funktion auf dem Heimrechner von Jac bei 40*40 Punkten etwa 300ms. Dafür kann Parcival mehr
Ich werde versuchen, möglichst bald eine (hoffentlich) Profan-kompatible Version hier hochzuladen, das ist ja schließlich das Ziel dieses Threads

das.dan
 
Athlon 550 / 768 MB / 8+10 GB / Radeon 9250 64 MB / Windows 2000 Professional / TFT 20" 1680x1050
Athlon XP 2000+ / 1.5 GB / 120+250 GB / GeForce 6800 XT 256 MB / Windows XP Professional
Athlon 64 3200+ / 512 MB / 60 GB / Radeon XPress 200M 64 MB / Windows XP Home / TFT 15.4" 1280x800
Intel Centrino 1.3 GHz / 512 MB / 40 GB / Radeon 9700 mobile / Windows XP Professional / TFT 15" 1400x1050
21.09.2007  
 



stdcall reicht, cdecl hingegen wäre komplizierter.
 
21.09.2007  
 




Daniel
Hoffmann
ok, ich danke dir wie verrückt dann werde ich mal auf meinem Zweitnotebook ne frühe Beta kompilieren und hier hochladen... allerdings mit vielen Hinweisen versehen, da ich mich in Profan nur ganz wenig auskenne, besonders was zweidimensionale Arrays angeht. In einer Funktion muss z.b. das aufrufende Programm einen Zeiger auf ein zweidimensionales Array übergeben. Dann reserviert SPIT3 Speicher, damit das aufrufende Programm mit seinem Pointer darauf zugreifen kann. Wie kann man in Profan dann die einzelnen Unterarrays freigeben? Ansonsten baue ich noch ne CleanUp-Funktion ein... *grübel*
 
Athlon 550 / 768 MB / 8+10 GB / Radeon 9250 64 MB / Windows 2000 Professional / TFT 20" 1680x1050
Athlon XP 2000+ / 1.5 GB / 120+250 GB / GeForce 6800 XT 256 MB / Windows XP Professional
Athlon 64 3200+ / 512 MB / 60 GB / Radeon XPress 200M 64 MB / Windows XP Home / TFT 15.4" 1280x800
Intel Centrino 1.3 GHz / 512 MB / 40 GB / Radeon 9700 mobile / Windows XP Professional / TFT 15" 1400x1050
21.09.2007  
 




Daniel
Hoffmann
Ok, hier kommt die Beta... Bitte wirklich vorsichtig damit sein, möglichst die Kurzanleitung vorher lesen, und ein bisschen testen Ich würde mich über Kommentare freuen, solange sie konstruktiv sind. Leider konnte ich in der Kurzanleitung nur in C-Syntax über die Zeiger schreiben, ich hoffe, ihr versteht es trotzdem gut Vielleicht hilft mir der Jac bei Gelegenheit auch dabei, das richtig für Profan zu testen, weil das für mich noch relatives Neuland ist.

71 kB
Kurzbeschreibung: Bitte mit Vorsicht genießen!
Hochgeladen:21.09.2007
Ladeanzahl160
Herunterladen
 
Athlon 550 / 768 MB / 8+10 GB / Radeon 9250 64 MB / Windows 2000 Professional / TFT 20" 1680x1050
Athlon XP 2000+ / 1.5 GB / 120+250 GB / GeForce 6800 XT 256 MB / Windows XP Professional
Athlon 64 3200+ / 512 MB / 60 GB / Radeon XPress 200M 64 MB / Windows XP Home / TFT 15.4" 1280x800
Intel Centrino 1.3 GHz / 512 MB / 40 GB / Radeon 9700 mobile / Windows XP Professional / TFT 15" 1400x1050
21.09.2007  
 



Funktioniert bei mir noch nicht...

DLL wird korrekt geladen, Funktionsadresse wird korrekt bezogen, ein Call auf evalia_interpreter gibt jedoch lediglich den Wert 1 zurück und ich erhalte einen Absturz mit anschließendem Dr.Watson.

Nach Deiner Anleitung sollte folgendes in XProfan ausreichen:

hat jedoch selbes Result wie
oder einfacher

Gibt immer 1 zurück und Absturz.
 
21.09.2007  
 



Nachtrag: Zum für Dich Selbertesten folgender Source anhängig als Exe:

740 kB
Hochgeladen:21.09.2007
Ladeanzahl165
Herunterladen
 
21.09.2007  
 




Daniel
Hoffmann
Danke fürs Testen und die ausführliche Antwort. Vielleicht sollte ich die Rückgabe auch einfach nur als float machen... Gut, oder ich gebe eben einen String mit dem Ergebnis zurück
 
Athlon 550 / 768 MB / 8+10 GB / Radeon 9250 64 MB / Windows 2000 Professional / TFT 20" 1680x1050
Athlon XP 2000+ / 1.5 GB / 120+250 GB / GeForce 6800 XT 256 MB / Windows XP Professional
Athlon 64 3200+ / 512 MB / 60 GB / Radeon XPress 200M 64 MB / Windows XP Home / TFT 15.4" 1280x800
Intel Centrino 1.3 GHz / 512 MB / 40 GB / Radeon 9700 mobile / Windows XP Professional / TFT 15" 1400x1050
21.09.2007  
 




Daniel
Hoffmann
So, jetzt gibt es in SPIT3 zumindest eine Funktion, die von Profan aufgerufen das macht, was sie soll. Hier das Wichtigste in Kürze:
Die Funktion heißt evalia_wb und erwartet zwei Parameter. Der erste zeigt auf den auszurechnenden String. Der zweite ist die Adresse des double-Wertes, in den das Ergebnis geschrieben werden soll. Jac de Lad hat mal eine INC dazu geschrieben, die ich mit in das ZIP-Archiv gepackt habe. Bitte vermeidet es erstmal, mehr geschlosssene als öffnende Klammern zu schreiben, das kann zu unerwarteten Ergebnissen führen. Ebenfalls ist es zwar jetzt möglich, auch -4*3 zuschreiben (Vorzeichen), aber das funktioniert noch nicht problemlos. In der Hoffnung, dass es nun bei jedem läuft, wünsche ich viel Spaß beim Probieren

8 kB
Hochgeladen:23.09.2007
Ladeanzahl153
Herunterladen
 
Athlon 550 / 768 MB / 8+10 GB / Radeon 9250 64 MB / Windows 2000 Professional / TFT 20" 1680x1050
Athlon XP 2000+ / 1.5 GB / 120+250 GB / GeForce 6800 XT 256 MB / Windows XP Professional
Athlon 64 3200+ / 512 MB / 60 GB / Radeon XPress 200M 64 MB / Windows XP Home / TFT 15.4" 1280x800
Intel Centrino 1.3 GHz / 512 MB / 40 GB / Radeon 9700 mobile / Windows XP Professional / TFT 15" 1400x1050
23.09.2007  
 




Daniel
Hoffmann
So, seit meinem letzten Posting hat sich einiges getan. SPIT3 hat einen neuen Parser bekommen und erkennt jetzt auch folgende Kurzschreibweisen:
2(3+5x^2sin(xy)) als 2*(3+5*x^2*sin(x*y)), wobei die Variablen derzeit alle noch mit 0 belegt sind. Eine entsprechende Funktion wird bald eingebaut. Ebenfalls fehlen noch die Funktionen zum Berechnen eines Terms mit unterschiedlichen Werten der Variablen, ist aber keine große Sache. Syntaxfehler werden noch nicht als solche erkannt, sondern dürften vielmehr Exceptions in Form von Access Violations auftauchen *schäm*, kommt auch in den nächsten alpha-Releases. Alle Funktions- und Variablennamen müssen klein geschrieben sein, Leerzeichen sollten vermieden werden.
Ich bitte euch, das Ding einfach mal zu testen, es ist wahnsinnig langsam momentan, weil der Parser mehr Durchläufe macht als in der vorigen Version. Dies macht die Auswertung eines einzelnen Terms langsamer, aber bei vielen aufeinanderfolgenden Berechnungen desselben Terms mit unterschiedlichen Variablenwerten geht alles noch etwas schneller Prinzipiel werden jetzt auch Funktionen mehrerer Parameter unterstützt, aber es gibt noch keine
Ich würde mich über kleine Bug-Reports und Anregungen/Wünsche eurerseits freuen. Wenn SPIT3 fehlerarm läuft, werde ich die Entwicklung an SPIT3 Ultra fortsetzen, welches dann auch mit Vektoren und Matrizen rechnen können soll.
Größenmäßig hat SPIT3 ziemlich zugelegt, 35kB ist zwar nicht die Welt, aber naja...
Ach so, fast vergessen: Die Funktion heißt weiterhin evalia_wb und erwartet als ersten Parameter den auszuwertenden String, als zweiten einen Zeiger auf den double-Wert, wo das Ergebnis hin soll. Beispiel:

declare x!
evalia_wb(2sin(6/5^2), addr(x!))

36 kB
Kurzbeschreibung: Bitte ausgiebig testen :)
Hochgeladen:05.10.2007
Ladeanzahl149
Herunterladen
 
Athlon 550 / 768 MB / 8+10 GB / Radeon 9250 64 MB / Windows 2000 Professional / TFT 20" 1680x1050
Athlon XP 2000+ / 1.5 GB / 120+250 GB / GeForce 6800 XT 256 MB / Windows XP Professional
Athlon 64 3200+ / 512 MB / 60 GB / Radeon XPress 200M 64 MB / Windows XP Home / TFT 15.4" 1280x800
Intel Centrino 1.3 GHz / 512 MB / 40 GB / Radeon 9700 mobile / Windows XP Professional / TFT 15" 1400x1050
05.10.2007  
 



Zur DLL


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.811 Betrachtungen

Unbenanntvor 0 min.
p.specht17.07.2018
Walter25.01.2018
Tommy12.08.2016
iF30.12.2015
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Daniel Hoffmann (6x)
iF (3x)


AGB  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Impressum  |  Mart  |  Support  |  Suche

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie