Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Assembler ::  Externe Prozedur in Windowsanwendung einbinden und aufrufen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
supernicky
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.11.2011
Beiträge: 122
Beitrag 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:

Assembler:
PRINT PROTO


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




Beitrag 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
Beitrag 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 :D habe dein Eintrittspunkt beim ersten auf

Assembler:
start:
und beim zweiten auf
Assembler:
start2:
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
c++.de :: Assembler ::  Externe Prozedur in Windowsanwendung einbinden und aufrufen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.