| |
|
|
- Página 1 - |
|
Matthias Arlt | Mi ersten Versuche con Ensamblador gestalten se dank Franks Einführungskurs mejor como pensamiento...! Nun Yo aber folgendes Problema o. nen Denkfehler drin:
Un ASM-Rutina ermittelt una String y schreibt esta en una Zona. Das Auslesen klappt con invoke MessageBox , 0, addr buffer, usw. bestens. Wenn Yo nun en lugar de Edición en uno Messagebox el String en el Profano-Programa weiterverarbeiten voluntad, como übergebe Yo esta korrekt? (addr buffer va sí sólo una invoke...)
Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 12.12.2006 ▲ |
|
|
|
|
| |
|
- Página 1 - |
|
Michael Dell | Ach así, hier podría una einfaches Volver txt# después de mov eax, para3 reichen. Si el no funzt declariere txt2# con el gleichen werten como txt# y escribir Volver txt2# y después de el Función imprimir cadena$(txt2#,0). |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 12.12.2006 ▲ |
|
|
|
|
Jörg Sellmeyer | Müßte que aquí no hdl&,spalte&,Addr(txt#)) heißen? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 12.12.2006 ▲ |
|
|
|
|
Matthias Arlt | So, todos Varianten durchprobiert (txt#...txt2#...addr(txt#)...), aber Ergebnis desafortunadamente como gehabt. Während bajo Profano7 immerhin todavía unbrauchbare Signo con cadena$(txt#,0) ausgelesen voluntad, passiert bajo XProfan después de el Messagebox rein garnichts. Versuche con invoke MemCopy... schlagen wegen Zugriffsverletzung ebenfalls fehl. Das Rätseln va also más... |
|
|
| 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
oder
mov eax, para3 mov lvi.pszText, eax mov lvi.cchTextMax, 256
para3 es sí el Zeiger en una String y el Listviewmessage esperado auch una Zeiger en una String.
mov eax, para3 AsmEnd
Ist eigentlich Quatsch, porque el Returnwert = txt# es. Übrigens kannst du mejor el Debugger anstelle uno Messagebox nutzen, en Zahlenwerte oder Cuerdas anzuzeigen. Probier veces:
PrintDec eax
oder
PrintStringByAddr para3
P.S.: Prima, dass dir mein Kurs gefallen ha. |
|
|
| |
|
|
|
Matthias Arlt | @Franco Besten Dank, funktioniert perfekt ! Hast me muy geholfen !!!
Ansonsten klappt el DLL-Erstellen ya bastante bien. Yo habe Su XPIA quasi como Standalone-Tool en PRFellow eingebunden y bastle me así en bastante komfortable Weise de el Editor heraus mi DLL (para actualmente todavía Profano7) zusammen. Ggf. lade Yo el veces como PRFellow-Erweiterung hier hoch...
Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 12.12.2006 ▲ |
|
|
|
|
Frank Abbing | Prima, el kann determinado el una u otros gebrauchen. PrFellow erfreut se sí siempre todavía grosser Beliebtheit. |
|
|
| |
|
|
|
Matthias Arlt | Yo habe inzwischen todavía una weiteres Problema con un Stringvergleich. Folgender Code funktioniert zwar como Solcher, liefert aber siempre ungleich zurück. Auch si Pufferinhalte definitiv igual son:
... cld mov ecx,sizeof Buffer2 lea esi,Buffer1 lea edi,Buffer2 repe cmpsb
jnz ungleich jz igual ...
Posesiones ya unterschiedlichste Varianten durchprobiert, aber desafortunadamente erfolglos...!?
Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 17.12.2006 ▲ |
|
|
|
|
Frank Abbing | repe cmpsb es veraltert. Tomar anstelle dessen más bien el APIs lstrcmp(), o. lstrcmpi(). Sicherer y viel más rápido. |
|
|
| |
|
|
| |
|
- Página 2 - |
|
|
Matthias Arlt | Kurioses Comportamiento...
Moin Franco Gracias primero para el Referencia. Werd Yo entonces probieren. Aber el eigentliche Problema liegt scheinbar ya antes el Eintritt en el Vergleich. Cuestión Yo después de el zweiten LB_Gettext el Pufferinhalt de, Yo en Prev TTest y Next Test posición. Cuestión Yo hingegen einzeln después de cada LB_Gettext de, stimmt lo aber todavía. Keine Idea, wodurch se el Pufferinhalt ändert...??? Das restos auch así, si yo stattdessen lokale Puffer verwende. Jedenfalls bekommt dadurch el Vergleich sí siempre ungleiche Daten angeboten. Und dasmacht con algo ratlos...
Profano-Code
declarar 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 en DLL
AsmStart LBCheckDoublettes
Parámetros hdl&
.data
szGleich db igual,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 igual
jne ungleich
igual:
invoke MessageBox,0,addr Prev,addr szGleich,MB_OK
ungleich:
invoke MessageBox,0,addr Prev,addr szUngleich,MB_OK
AsmEnd
¿Puede Usted Usted (y me) el erklären?
Gracias y Saludo Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 18.12.2006 ▲ |
|
|
|
|
Frank Abbing | Das hier se el Fehler auslösen. So reservierst du sólo 1 Byte:
.data? Prev db ? Next db ?
Machs así:
.data? Prev db 512 dup(?) Next db 512 dup(?)
512 bedeuten hier 512 Bytes, el reserviert voluntad. |
|
|
| |
|
|
|
Matthias Arlt | Gracias Franco, genau el war lo auch ! Mit el dup Tuve mich todavía no angefreundet o. dessen Verwendung mißverstanden (Desde que sí eigentlich nichts verdoppeln quería...). Das erklärt nun auch igual otro aufgetretene Fragen ! Auch macht se el Vergleich mittels API wesentlich freundlicher, porque gewohnter. Schön, si uno así rápidamente fachkundige Ayuda bekommt !!!
Besten Dank Matthias |
|
|
| WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia | 18.12.2006 ▲ |
|
|
|
|
Frank Abbing | |
|
| |
|
|