| |
|
|
- Seite 1 - |
|
Normann Strübli | Hallo,
vielleicht habe ich es ja irgendwo überlesen, aber sind Prozeduren innerhalb des XPIA-Codes erlaubt?
Geht das? Und wie kann dann die obere Prozedur etwas an die aufrufende übergeben wenn ret nicht erlaubt ist?
Gruß Normann |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
Normann Strübli | Aber in der Doku von Frank steht ja auch:
[quote:e9d72de353]Parameters x&, bereich#, addr(string$)[/quote:e9d72de353]
|
|
|
| |
|
|
|
Michael Wodrich | Dann ändere bitte mal den Namen der Prozedur. Das wollte ich erst mit schreiben, hatte es aber verworfen. Evtl. hängt es doch mit der Art der Namensgebung zusammen (hier speziell mit dem Wort DWORD). |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 09.11.2005 ▲ |
|
|
|
|
Normann Strübli | Nein, das ist es leider auch nicht. aber trotzdem danke für Deine schnelle Hilfe!
Gruß Normann |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
Michael Dell | Also ich würd auf eax als Zähler verzichten und ne Variable einsetzen, etwa so:
{$Q}
Declare Istring$,Pb&
Asmstart String2dword
Parameters addr(istring$)
Return pb&
LOCAL Result :DWORD
LOCAL Zaehler :DWORD
mov Result,0
mov edi,para1
invoke lstrlen,para1
mov Zaehler, eax
.while Zaehler!=0
xor edx,edx
mov dl,byte ptr [edi]
sub dl,"0"
mov esi,eax
dec esi
push eax
mov eax,edx
push ebx
mov ebx,10
.while esi > 0
mul ebx
dec esi
.endw
pop ebx
add Result,eax
pop eax
inc edi
sub Zaehler,1
.endw
mov eax,Result
Asmend
Zumindest läuft so das Assemblieren und Linken ausgezeichnet. Ach so, Scall steht zummindest in der aktuellen Masm Version in der Macro.asm, die in der Basic.inc eingefügt kann nie schaden.
Nachtrag: Oh, hab grad gemerkt das dein Orginal Code auch Funzen Müste zumindest wenn man {$Q} oder so am Anfang stehen hat! |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 10.11.2005 ▲ |
|
|
|
|
| {$q} heisst nur das XPSE nach verrichteter Arbeit sich schließen soll - ohne auf Tastatureingaben zu warten.
Eine Variable statt EAX - hm - Michael hat natürlich recht das Eax (also ax) nicht grad fürs Zählen bedacht war, aber ich persönlich würde aus Performancegründen trotzdem (besonders heutzutage) lieber mit eax Zählen statt mit einer Variable. Sei angemerkt - bei Deinem Code bleibt es wohl unmerklich ob mit Register oder Variable gezählt wird.
Wenn der AsmBlock sich nicht ordnungsgemäß kompilieren/linken lässt - befolge Michaels Tip nur Variablen statt auch Funktionen per Parameters zu übergeben. Ich bin mir nämlich nicht sicher in welcher XPSE-Version ich da das addr bei Parameters unbehandelt lasse.
Salve. |
|
|
| |
|
|
|
Michael Wodrich | Tja, vielleicht sollten wir uns angewöhnen die Versionsnummern aller beteiligten Programme parat zu haben, damit man die Fehler nachvollziehen kann. Obwohl - in einer Rechnerumgebung vollkommen ohne Programmiertools nützt auch das nichts.
Zur Fehlerbehebung jetzt: alle Tools auf den neuesten Stand bringen (XPSE, XPIA, MASM) und erneut testen. Dann erübrigt sich vielleicht sogar ein Umschreiben des Codes.
Ich glaube, die String2dw steht in zwei Varianten auch in der MASM-Lib. Schau Dir die beiden mal an. Ich rate mal die Namen: s2dw, str2dw, sToDW, StrToDW Wenn kein Treffer dabei ist: in der Masm-Hilfe sind die Beschreibungen.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 10.11.2005 ▲ |
|
|
|
|
Frank Abbing | Hi,
Also ich hab keine Probleme, den Code zu übersetzten. Das liegt hier sicher nur an der verwendeten XPSE-Version. Deine Assemblercode jedenfalls ist völlig in Ordnung. EAX als Zähler einzusetzen ist auch absolut in Ordnung, auch wenn ECX gebräuchlicher ist. Aber das ist egal. XPIAs Parameters verkraftet durchaus auch Funktionen. Intern ist es so, das Parameters nachher umgewandelt wird in Profans External. Alles, was External an Parametern verkraftet, schafft also auch Parameters. Warum XPSE in neueren Versionen eigentlich eingreifen will in XPIAs Parameters, weiss ich auch nicht genau. Normalerweise sollte der Befehl von XPSE links liegen gelassen werden, wie alles in den Assemblerfunktionen. Ich glaube, das hängt mit zukünftigen Erweiterungen zusammen, vielleicht erklärt iF das noch genauer. An XPIA jedenfalls liegts nicht. |
|
|
| |
|
|
|
Normann Strübli | Jetzt nicht schlagen!
Es lag am XPIA, war aber meine Schuld
Ich habe nach einer kompletten Neuinstallation das Profan-Verzeichnis meiner Sicherung auf die Platte zurückkopiert und aus dem Internet die aktuellen Versionen (masm32,XPIA,XPSE) heruntergeladen und installiert.
Hat komischerweise alles funktioniert auch die Beispiele die beim XPIA dabei waren. (zumindest fast! alle wie ich nun gemerkt habe)
Kurzum, im Profan-Verzeichnis befand sich noch eine alte Version der XPIA.EXE, und die hat der XPSE natürlich der aktuellen Version, die sich nun im XPIA Verzeichnis befand, vorgezogen. Hätte ich auch eher drauf kommen können, aber im glauben alles auf dem neusten Stand zu haben vergleicht man keine Versionsnummern.
Feste Pfadangaben im XPSE hätten hier bestimmt Abhilfe geschaffen, außerdem hat iF so dann eine gewisse Mitschuld
Gruß Normann |
|
|
| |
|
|
|
| Schuld hab sowieso ich - aber feste Pfadangaben? |
|
|
| |
|
|
|
Normann Strübli | @iF: nein, das ist schon ganz Ok, so wie es ist.
Kurze Frage nochmal, folgendes steht ja in der Hilfe des XPIA: [quote:8fe3def3d0] Eigene oder andere Bibliotheken (Libs) können sehr einfach dazu genommen werden. Bereits eingebaut sind kernel32, user32, masm32, comctl32, shell32, gdi32, ole32, oleaut32, comdlg32, fpu und winmm. Weitere können selber in die Datei include/basis.inc integriert werden.[/quote:8fe3def3d0] Ok, hab ich mir gedacht fehlt mir noch die windows.inc. Also wie beschieben[quote:8fe3def3d0]include D:masm32includewindows.inc[/quote:8fe3def3d0] in die basis.inc eingefügt.
Jetzt werde ich aber im Consolenfenster überhäuft mit Fehlermeldungen à la: [quote:8fe3def3d0]D:masm32includewindows.inc(7934) : error A2163 non-benign structure redifinition: incorrect initializers : NMREBARCHILDSIZE[/quote:8fe3def3d0] usw.
was ist denn da nu wieder schief gelaufen? |
|
|
| |
|
|
|
Frank Abbing | XPIA bindet die windows.inc schon von sich aus dazu. Ist ja keine Lib, nur eine Inc. Doppelt gemoppelt hält halt NICHT immer besser. Manchmal erzeugts auch Fehler |
|
|
| |
|
|
|
Frank Abbing | [quote:295287844d]XPIAs Parameters verkraftet durchaus auch Funktionen. [/quote:295287844d] Mann, Mund wieder zu voll genommen. Immer klappt das doch leider nicht, aber ich habe schon nachgebessert. In der nächsten Version funkioniert (fast) alles |
|
|
| |
|
|