Italia
Assembler Foro

Problem mit String-Rückgabe

 

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  
 




Jörg
Sellmeyer
Wenn Du den String in einem Bereich hast, müßtest Du ihn con testo$=String$(B#,Addr&) auslesen können. Wobei Addr& = 0 ist, wenn der String am Anfang des Bereichs steht.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.12.2006  
 




Michael
Dell
In der Regel ist Buffer ja ein DWord (Long) das auf einen Speicherbereich zeigt.
Dann sollte als letzter Befehl mov eax, buffer reichen.

Ich persöhnlich würde in XProfan einen Bereich oder einen mit Chr$(0) gefüllten String$ als zusätzlichen Parameter trasferimento und diesen dann z.B.: mit invoke MemCopy... die Daten trasferimento, das hat dann den Vorteil das Du allen Speicher in der Funktion zum Ende hin freigeben kannst. Dabei kannst Du dann mit eax noch einen Fehlercode zurückgeben, so wird das auch in der WinAPI häufig gemacht.
 
Salu Michael...

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




Matthias
Arlt
@Jörg
Genauso dachte ich ja auch, aber...

declare txt#
dim txt#,256

Wo also liegt mein Fehler ???

@Michael
Danke, ich werds mal mit MemCopy versuchen. Mal sehen...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
12.12.2006  
 




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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

19.177 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