| |
|
|
| Ich möchte eine ASM-Schleife benutzen und darin die original Profanbefehle reinsetzen. Wie geht so etwas?
mfg peter |
|
|
| |
|
|
|
Frank Abbing | Hm? Profan-Befehle im Assemblerteil? Das geht naturalmente nicht. |
|
|
| |
|
|
|
Sebastian Sprenger | Naja, du könntest vielleicht die XProfan-Befehle in un Prozedur packen, deren Adresse circa die Funktion ProcAddr ermitteln, an die Assemberroutine trasferimento und sie dort circa den Opcode call aufrufen - aber wieso sollte die Schleife selbst in Assembler vorliegen und der Schleifenkörper in XProfan? |
|
|
| Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32 Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM Windows Me, 1.8 Ghz, 256 MB RAM | 28.08.2008 ▲ |
|
|
|
|
| Warum funktionieren denn die Befehle von Windows mit dem Vorbefehl "Invoke"?
mfg peter |
|
|
| |
|
|
|
| Kannst du mal eine kleine Demo von deinem Vorschlag mit Procaddr herstellen.
Danke.
mfg peter |
|
|
| |
|
|
|
Frank Abbing | Von der Methode rate ich dringend ab, du versuchst in ein Sackgasse zu flüchten. Momentan ist ProcAddr zu unsicher und kann zu schlimmen Fehlern führen, selbst unter XProfan 11. Gerade, wenn du Profanfunktionen von Assembler aus starten willst.
"Invoke" ist ein Call zu einer Dll-Funktion oder zu einem Speicherbereich. Da XProfan nicht nativ arbeitet, kannst du folglich auch keine native Routine aufrufen. ProcAddr versucht dem Abhilfe zu leisten, versagt aber in bestimmten Situationen. |
|
|
| |
|
|
|
| Frank Abbing
Von der Methode rate ich dringend ab, du versuchst in ein Sackgasse zu flüchten. Momentan ist ProcAddr zu unsicher und kann zu schlimmen Fehlern führen, selbst unter XProfan 11. Gerade, wenn du Profanfunktionen von Assembler aus starten willst.
Hmpf, das Problem wird einfach nicht verstanden - das ist nicht "unsicher". ProcAddr darf nur dann nicht verwendet werden wenn ausserhalb des eigentlichen Ablaufthreads ein Call abgesetzt würde. Schreibt man jedoch eine ASM-Funktion welche eine mit Procaddr bezogene Funktion aufruft und der eigentliche Ablauf des XProfanprogrammes wegen des Inline-ASM-Aufrufes sowieso geblockt ist, dann ist das sogar eine gute Möglichkeit welche ich ebenso oft nutze - und das funktioniert auch sehr sehr zuverlässig.
Ein Profanbefehl in einer ASM Schleife ist also solange kein Problem, wie die ASM-Schleife auch im selben Thread passiert und/oder nicht z.B. circa Timer injeziert wird. |
|
|
| |
|
|
|
Frank Abbing | Peter, sollten also unvorhergesehene Dinge bei der Ausführung deine Programmi passieren, wende dich bitte direkt an den guten, alten iF. Ich bin sowas von raus aus der Sache... |
|
|
| |
|
|
|
| Ein Call auf eine mit ProcAddr-bezogene XProfanfunktion darf nur geschehen wenn das XProfan grad "steht" - ist eigentlich ganz einfach.
Ein Call heraus aus einer Inlineasm-Funktion, die grade abgearbeitet wird, ist also unproblematisch. Diese Inlineasm-Funktion darf nur nicht in einem anderen Thread abgearbeitet werden da sichergestellt werden muss, dass das XProfanprogramm auch wirklich grad "steht". Deshalb ist auch ein Call per SetTimer-Api nicht zu nutzen, aber Roland wird sicher auch das noch hinbekommen.
Im Bezug auf Assembler ist Frank aber deutlicher Ansprechpartner da ich (im Vergleich zu Ihm) hiermit viel viel weniger programmiere, aber dieses spezielle Problem ist ja kein ASM-Problem. |
|
|
| |
|
|
|
Sebastian Sprenger | |
|
| Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32 Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM Windows Me, 1.8 Ghz, 256 MB RAM | 29.08.2008 ▲ |
|
|
|
|
| Und ein Returnwert liegt imho auch (korrekterweise) im eax-Register. |
|
|
| |
|
|
|
| Jup, danke.
Haut sauber hin und ist ganz fix .
Danke.
mfg peter |
|
|
| |
|
|