inzwischen habe ich leidlich erfolgreich an meine früheren Assembler-Zeiten angeknüpft. Microsoft C++ mag ich allerdings auch nicht mehr missen. Aber es gibt eben doch viele Funktionen, die lassen sich mit relativ geringem Aufwand (und mit hervorragender Laufzeit-Performance) mit einer kleinen MASM32-Utility lösen.
Hier ist nun mein Problem:
Ich möchte aus dem Assembler-Code heraus eine Instanz einer C++-Klasse aufrufen.
Anhand einer Link-Liste habe ich den verschlüsselten Namen der aufzurufenden Funktion identifiziert und mit dem Statement
- Code: Alles auswählen
extern syscall ?Append@CString@@QAEXPBD@Z:PTR
als externe Funktion deklariert. Der - soweit ich es übersehen kann - entscheidende Teil meiner MASM-Funktion ist nun
- Code: Alles auswählen
extern syscall ?Append@CString@@QAEXPBD@Z:PTR
. . .
EncodeAsm PROC pTarget:DWORD, pFormatText:DWORD, ValueList:VARARG
. . .
PUSH 040h ; der zu übergebende Wert (per C++-Argumentliste)
MOV ECX,pTarget ; Zeiger auf die Instanz der Daten
JMP ?Append@CString@@QAEXPBD@Z
. . .
Der Linker ist mit meinem Code zufrieden.
Der Aufruf geht allerdings jedesmal schief und endet mit einer Access Violation.
Hat jemand eine Idee, wo mein Fehler liegt?
Oder gibt es irgendwo eine allgemeinere Beschreibung, wie man eine C++-Klassenfunktion aufruft?
Vielen Dank vorab
Manni-P

