| |
|
|
- page 1 - |
|
Matthias Arlt | mon ersten Versuche avec Assembler gestalten sich dank Franks Einführungskurs besser comme gedacht...! eh bien habe je mais folgendes Problem bzw. nen Denkfehler drin:
une ASM-Routine ermittelt une String et écrit cette dans une Bereich. cela Lecture klappt avec invoke MessageBox , 0, addr buffer, usw. bestens. si je eh bien statt Ausgabe dans einer Messagebox den String im Profan-Programme weiterverarbeiten veux, comment übergebe je cette korrekt? (addr buffer allez oui seulement pour einem invoke...)
Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 12.12.2006 ▲ |
|
|
|
|
| |
|
- page 1 - |
|
Michael Dell | ah bon, ici pourrait un simple Retour txt# pour mov eax, para3 reichen. si cela pas funzt declariere txt2# avec den gleichen werten comment txt# et schreibe Retour txt2# et pour qui Funktion imprimer string$(txt2#,0). |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 12.12.2006 ▲ |
|
|
|
|
Jörg Sellmeyer | Müßte que voici pas hdl&,spalte&,Addr(txt#)) appeler? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 12.12.2006 ▲ |
|
|
|
|
Matthias Arlt | So, alle Varianten durchprobiert (txt#...txt2#...addr(txt#)...), mais Ergebnis malheureusement comment gehabt. Au cours de sous Profan7 immerhin encore unbrauchbare marque avec string$(txt#,0) ausgelesen volonté, passiert sous XProfan pour qui Messagebox rein garnichts. Versuche avec invoke MemCopy... schlagen à cause de Zugriffsverletzung également fehl. cela Rätseln allez alors plus... |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 12.12.2006 ▲ |
|
|
|
|
Frank Abbing | lea eax, para3 mov lvi.pszText, eax mov lvi.cchTextMax, 256
muss heissen:
m2m lvi.pszText, para3 mov lvi.cchTextMax, 256
ou bien
mov eax, para3 mov lvi.pszText, eax mov lvi.cchTextMax, 256
para3 ist oui qui aiguille sur une String et qui Listviewmessage erwartet aussi une aiguille sur une String.
mov eax, para3 AsmEnd
Ist eigentlich Quatsch, weil qui Returnwert = txt# ist. Incidemment peux du besser den Debugger anstelle einer Messagebox nutzen, um Zahlenwerte ou bien Cordes anzuzeigen. Probier la fois:
PrintDec eax
ou bien
PrintStringByAddr para3
P.S.: Prima, dass dir mon Kurs plaisons hat. |
|
|
| |
|
|
|
Matthias Arlt | @Frank Besten Dank, funktioniert parfait ! la hâte mir très geholfen !!!
Ansonsten klappt cela DLL-Erstellen déjà pas mal. j'ai Deinen XPIA quasi comme Standalone-Tool dans PRFellow eingebunden et bastle mir avec cela sur droite komfortable Weise aus dem Editor heraus mon DLL (pour derzeit encore Profan7) zusammen. Ggf. lade je cela la fois comme PRFellow-Erweiterung ici hoch...
Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 12.12.2006 ▲ |
|
|
|
|
Frank Abbing | Prima, cela peux bestimmt qui une ou bien autre gebrauchen. PrFellow erfreut sich oui toujours grosser Beliebtheit. |
|
|
| |
|
|
|
Matthias Arlt | j'ai inzwischen encore un weiteres Problem avec einem Stringvergleich. Folgender Code funktioniert zwar comme Solcher, liefert mais toujours ungleich zurück. aussi si Pufferinhalte définitif juste sommes:
... cld mov ecx,sizeof Buffer2 lea esi,Buffer1 lea edi,Buffer2 repe cmpsb
jnz ungleich jz juste ...
Habe déjà unterschiedlichste Varianten durchprobiert, mais malheureusement erfolglos...!?
Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 17.12.2006 ▲ |
|
|
|
|
Frank Abbing | repe cmpsb ist veraltert. prends anstelle dessen lieber qui APIs lstrcmp(), bzw. lstrcmpi(). Sicherer et viel plus rapide. |
|
|
| |
|
|
| |
|
- page 2 - |
|
|
Matthias Arlt | Kurioses Verhalten...
Moin Frank merci erstmal pour den Hinweis. Werd je ensuite essayer. mais cela eigentliche Problem liegt scheinbar déjà avant dem Eintritt dans den comparaison. Frage je pour dem zweiten LB_Gettext den Pufferinhalt ab, habe je dans Prev TTest et dans Next Test stehen. Frage je hingegen einzeln pour chaque LB_Gettext ab, stimmt es mais encore. je n'en sais rien, wodurch sich qui Pufferinhalt ändert...??? cela bleibt aussi so, si je stattdessen lokale Puffer verwende. Jedenfalls bekommt dadurch qui comparaison oui toujours ungleiche données angeboten. et dasmacht avec quelque chose perplexe...
Profan-Code
declare lb&,dll&
dll&=usedll(E:LB.DLL)
cls
lb&=createlistbox(%hwnd,,10,10,300,200)
addstring(lb&,Test)
addstring(lb&,Test)
waitkey
external(LB.DLL,LBCheckDoublettes,lb&)
freedll dll&
Code dans DLL
AsmStart LBCheckDoublettes
Paramètres hdl&
.data
szGleich db juste,0
szUngleich db ungleich,0
szPrev db Prev,0
szNext db Next,0
.data?
Prev db ?
Next db ?
.code
LOCAL ItemCount:DWORD
LOCAL LoopCount:DWORD
invoke SendMessage, para1, LB_GETCOUNT, 0, 0
mov ItemCount,eax
invoke SendMessage, para1, LB_GETTEXT, LoopCount, ADDR Prev
inc LoopCount
invoke SendMessage, para1, LB_GETTEXT, LoopCount, ADDR Next
lea di,Prev
lea si,Next
mov cx, sizeof Next
cld
repe cmpsb
je juste
jne ungleich
juste:
invoke MessageBox,0,addr Prev,addr szGleich,MB_OK
ungleich:
invoke MessageBox,0,addr Prev,addr szUngleich,MB_OK
AsmEnd
peux Du Dir (et mir) cela expliquer?
merci et Salut Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 18.12.2006 ▲ |
|
|
|
|
Frank Abbing | cela ici wird den faute auslösen. So reservierst du seulement 1 Byte:
.data? Prev db ? Next db ?
Machs so:
.data? Prev db 512 dup(?) Next db 512 dup(?)
512 bedeuten ici 512 Bytes, qui reserviert volonté. |
|
|
| |
|
|
|
Matthias Arlt | merci Frank, oui c'est ca cela était es aussi ! avec dem dup J'ai eu mich encore pas angefreundet bzw. dessen Verwendung mißverstanden (là je oui eigentlich rien doubler voulais...). cela erklärt eh bien aussi juste autre aufgetretene Fragen ! aussi pouvoir sich qui comparaison mittels API wesentlich freundlicher, weil habituel. joli, si on so vite fachkundige Aider bekommt !!!
Besten Dank Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 18.12.2006 ▲ |
|
|
|
|
Frank Abbing | |
|
| |
|
|