Externe Prozedur in Windowsanwendung einbinden und aufrufen
-
Hallo mal wieder,
nach mehreren kläglichen Versuchen eine externe Prozedur einzubinden, benötige
ich wiedermal etwas Hilfe.Hier die asm Datei "funk.asm" mit der Proc "PRINT"
Diese wird als normale Win32.exe erstellt..486 .model flat, stdcall option casemap :none public PRINT .code start2: PRINT proc ;EAX enthält die Zahl zum anzeigen .data print_buffer db 20 dup (?) .code beg_print: xor ebx, ebx xor ecx, ecx mov ecx, 10d ;ECX mit 10 laden xor edx, edx ;EDX löschen mov ebx, offset print_buffer ;EBX auf buffer Anfang add ebx, 12d ;EBX ans Ende von buffer + 1 schleife2: dec ebx ;EBX ans Ende von buffer div ecx ;EAX / 10 add dl, 30h ;DL + 30h = ASCII Zahl mov byte ptr [ebx], dl ;ASCII Zahl nach EBX schreiben xor edx, edx ;EDX löschen ;inc dword [print_zaehler] ;Zähler erhöhen cmp eax, 0 ;haben wir schon 0? jne schleife2 ;wenn nicht nächste Zahl ;# umgewandelte Zahl ausgeben mov eax, ebx ret PRINT endp end start2
Die Prozedur binde ich wie folgt in meiner Anwendung "programm2" ein:
PRINT PROTO
Kompilieren:
ml.exe /c /Zd /Fl /coff programm2.asm link.exe /Subsystem:windows programm2.obj funk.obj
Die Datei wird erstellt aber sie lässt sich nicht öffnen
Habe es auch schon mit extrn versucht aber das ist aus Beispielen für 16-Bite EXE
Dateien. Da werde ich überhäuft mit Fehlermeldungen.Gruß, Nicky
-
Warum definiert dein Module einen Programmeintrittspunkt (=PRINT)? - da sollte der Linker eigentlich wegen mehrerer Startpunkte meckern.
Ansonsten: die übliche Vorgehensweise ist eine Include mit entsprechenden PROTOs für Funktionen/Prozeduren und EXTERNDEFs für variablen zu erstellen.
Diese Include wird in allen Modulen verwendet. Die Prozeduren und Variablen müssen dann in irgendeinem der Module angeltet werden.
-
Hallo masm,
masm schrieb:
Warum definiert dein Module einen Programmeintrittspunkt (=PRINT)? - da sollte der Linker eigentlich wegen mehrerer Startpunkte meckern.
Oh, der hat gemeckert
habe dein Eintrittspunkt beim ersten auf
start:
und beim zweiten auf
start2:
gesetzt.
Ansonsten: die übliche Vorgehensweise ist eine Include mit entsprechenden PROTOs für Funktionen/Prozeduren und EXTERNDEFs für variablen zu erstellen.
Diese Include wird in allen Modulen verwendet. Die Prozeduren und Variablen müssen dann in irgendeinem der Module angeltet werden.Wie gesagt, ich bin davon ausgegangen das ich beim Linken die Objektdatei mit den
Funktionen mit angeben kann um diese zu nutzen... So wie in den Beispielen im
Buch.Ich versuch es mal mit "include".
Danke und Gruß
Nicky