| Autor |
Nachricht |
supernicky
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.11.2011
Beiträge: 122
|
supernicky Mitglied
21:15:17 07.08.2012 Titel: |
Externe Prozedur in Windowsanwendung einbinden und aufrufen |
Zitieren |
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.
| Assembler: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | .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:
Kompilieren:
| Code: | 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 |
|
|
|
 |
masm
Unregistrierter
|
masm Unregistrierter
22:26:42 07.08.2012 Titel: |
|
Zitieren |
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. |
|
|
|
 |
supernicky
Mitglied
Benutzerprofil
Anmeldungsdatum: 06.11.2011
Beiträge: 122
|
supernicky Mitglied
20:20:30 08.08.2012 Titel: |
|
Zitieren |
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
und beim zweiten auf gesetzt.
| Zitat: |
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 |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|