Italia
Assembler Foro

Problem mit String-Rückgabe

 
- Page 1 -



Matthias
Arlt
Meine ersten Versuche mit Assembler gestalten sich dank Franks Einführungskurs besser als gedacht...! Nun habe ich aber folgendes Problem bzw. nen Denkfehler drin:

Eine ASM-Routine ermittelt einen String und schreibt diesen in einen Bereich. Das Auslesen klappt mit invoke MessageBox , 0, addr buffer, usw. bestens. Wenn ich nun statt Ausgabe in einer Messagebox den String im Profan-Programm weiterverarbeiten will, wie übergebe ich diesen korrekt? (addr buffer geht ja nur nach einem invoke...)

Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
12.12.2006  
 



 
- Page 1 -



Michael
Dell
Ach so, hier potuto ein einfaches Return txt# nach mov eax, para3 reichen. Wenn das nicht funzt declariere txt2# mit den gleichen werten wie txt# und schreibe Return txt2# und nach der Funktion print string$(txt2#,0).
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
12.12.2006  
 




Jörg
Sellmeyer
Müßte das hier nicht 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, alle Varianten durchprobiert (txt#...txt2#...addr(txt#)...), aber Ergebnis leider wie gehabt. Während unter Profan7 immerhin noch unbrauchbare Zeichen mit string$(txt#,0) ausgelesen werden, passiert unter XProfan nach der Messagebox rein garnichts. Versuche mit invoke MemCopy... schlagen wegen Zugriffsverletzung ebenfalls fehl. Das Rätseln geht also weiter...
 
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 ist ja der Zeiger auf einen String und die Listviewmessage erwartet auch einen Zeiger auf einen String.

mov eax, para3
AsmEnd


Ist eigentlich Quatsch, weil der Returnwert = txt# ist.
Übrigens kannst du besser den Debugger anstelle einer Messagebox nutzen, um Zahlenwerte oder Strings anzuzeigen. Probier mal:

PrintDec eax


oder

PrintStringByAddr para3


P.S.: Prima, dass dir mein Kurs gefallen hat.
 
12.12.2006  
 




Matthias
Arlt
@Frank
Besten Dank, funktioniert perfekt ! Hast mir sehr geholfen !!!

Ansonsten klappt das DLL-Erstellen schon ganz gut. Ich habe Deinen XPIA quasi als Standalone-Tool in PRFellow eingebunden und bastle mir damit auf recht komfortable Weise aus dem Editor heraus meine DLL (per derzeit noch Profan7) zusammen. Ggf. lade ich das mal als PRFellow-Erweiterung hier hoch...

Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
12.12.2006  
 




Frank
Abbing
Prima, das kann bestimmt der eine oder andere gebrauchen. PrFellow erfreut sich ja immer noch grosser Beliebtheit.
 
12.12.2006  
 




Matthias
Arlt
Ich habe inzwischen noch ein weiteres Problem mit einem Stringvergleich. Folgender Code funktioniert zwar als Solcher, liefert aber immer ungleich zurück. Auch wenn Pufferinhalte definitiv gleich sind:

...
cld
mov ecx,sizeof Buffer2
lea esi,Buffer1
lea edi,Buffer2
repe cmpsb

jnz ungleich
jz gleich
...

Habe schon unterschiedlichste Varianten durchprobiert, aber leider erfolglos...!?

Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
17.12.2006  
 




Frank
Abbing
repe cmpsb ist veraltert. Nimm anstelle dessen lieber die APIs lstrcmp(), bzw. lstrcmpi(). Sicherer und viel schneller.
 
17.12.2006  
 



 
- Page 2 -



Matthias
Arlt
Kurioses Verhalten...

Moin Frank
Danke erstmal per den Hinweis. Werd ich dann probieren. Aber das eigentliche Problem liegt scheinbar schon vor dem Eintritt in den Vergleich. Frage ich nach dem zweiten LB_Gettext den Pufferinhalt ab, habe ich in Prev TTest und in Next Test stehen. Frage ich hingegen einzeln nach jedem LB_Gettext ab, stimmt es aber noch. Keine Ahnung, wodurch sich der Pufferinhalt ändert...???
Das bleibt auch so, wenn ich stattdessen lokale Puffer verwende. Jedenfalls bekommt dadurch der Vergleich ja immer ungleiche Daten angeboten. Und dasmacht mit etwas ratlos...


Kannst Du Dir (und mir) das erklären?

Danke und Saluto
Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
18.12.2006  
 




Frank
Abbing
Das hier wird den Fehler auslösen. So reservierst du nur 1 Byte:

.data?
Prev db ?
Next db ?

Machs so:

.data?
Prev db 512 dup(?)
Next db 512 dup(?)

512 bedeuten hier 512 Bytes, die reserviert werden.
 
18.12.2006  
 




Matthias
Arlt
Danke Frank, genau das war es auch ! Mit dem dup hatte ich mich noch nicht angefreundet bzw. dessen Verwendung mißverstanden (Da ich ja eigentlich nichts verdoppeln wollte...). Das erklärt nun auch gleich andere aufgetretene Fragen !
Auch macht sich der Vergleich mittels API wesentlich freundlicher, weil gewohnter. Schön, wenn man so schnell fachkundige Aiuto bekommt !!!

Besten Dank
Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
18.12.2006  
 




Frank
Abbing
 
18.12.2006  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

18.658 Views

Untitledvor 0 min.
p.specht21.02.2019
Wilfried21.05.2016
Peter Max Müller10.10.2014
iF28.04.2013
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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