Das Problem:
Ein Programm (model flat) soll aus mehreren Modulen bestehen, die ich mit CALL anspringen will.
Meiner Meinung nach habe ich alles richtig gemacht, also ENTERN, FAR, PUBLIC usw.
Aber der Compiler bringt einen Fehler beim CALL "error A2004: symbol type conflict"
und der Link bringt "unresolved external symbol".
Wer kann mir helfen ??
Grüße Uli
Link
Moderatoren: crack, Krüsty, Marwin
sorry, meine Kristallkugel ist gerade in Reparatur 
welcher Compiler (am besten mit version), überhaupt welcher Dialekt - MASM, TASM, FASM, NASM ?
Stackrahmen mit ENTER einrichten ist schon ziemlich ungewöhnlich, genauso wie FAR nutzung - vielleicht wäre auch ein Stückchen Code nicht schlecht - ansonsten fallen mir schon für MASM Compiler ein dutzend Fehlerquellen ein...
Erste Diagnose: das mit dem Linker ist normal - da du ja einen Fehler bei Call hast, wenn dieser weg ist dürfte beim Linken keine Probleme geben... kann ja auch ein vertipper sein (alles schon passiert :rolleyes:)
Ansonten bitte mehr infos
welcher Compiler (am besten mit version), überhaupt welcher Dialekt - MASM, TASM, FASM, NASM ?
Stackrahmen mit ENTER einrichten ist schon ziemlich ungewöhnlich, genauso wie FAR nutzung - vielleicht wäre auch ein Stückchen Code nicht schlecht - ansonsten fallen mir schon für MASM Compiler ein dutzend Fehlerquellen ein...
Erste Diagnose: das mit dem Linker ist normal - da du ja einen Fehler bei Call hast, wenn dieser weg ist dürfte beim Linken keine Probleme geben... kann ja auch ein vertipper sein (alles schon passiert :rolleyes:)
Ansonten bitte mehr infos
Na, dann wollen wir mal ein bisschen Licht in die Kugel bringen...
Ich verwende MASM Version 6.14.8444
Anschließend die Source-Ausschnitte und die Compile/Link Aufrufe.
Grüße an die Kugel...
__________________________________________________________________
Hauptprog:
.386
.model flat,stdcall
EXTERN Roll9:FAR
Start:
*
*
*
call Roll9
END Start
__________________________________________________________________
Modul1:
.386
.model flat,stdcall
PUBLIC Roll9
Start:
Roll9 PROC FAR
*
*
*
Roll9 ENDP
END Start
___________________________________________________________________
ml /c /coff /Fl /Sn Hauptprog.asm
ml /c /coff /Fl /Sn Modul1.asm
link /subsystem:windows Hauptprog.obj Modul1.obj menue.obj
___________________________________________________________________
Ich verwende MASM Version 6.14.8444
Anschließend die Source-Ausschnitte und die Compile/Link Aufrufe.
Grüße an die Kugel...
__________________________________________________________________
Hauptprog:
.386
.model flat,stdcall
EXTERN Roll9:FAR
Start:
*
*
*
call Roll9
END Start
__________________________________________________________________
Modul1:
.386
.model flat,stdcall
PUBLIC Roll9
Start:
Roll9 PROC FAR
*
*
*
Roll9 ENDP
END Start
___________________________________________________________________
ml /c /coff /Fl /Sn Hauptprog.asm
ml /c /coff /Fl /Sn Modul1.asm
link /subsystem:windows Hauptprog.obj Modul1.obj menue.obj
___________________________________________________________________
also wenn man statt EXTERN einen Proto benutzt:
Roll9 proto
dann läufts. Warum das mit Exertn nicht funktionier kann ich nicht sagen.
Aber einfacher wäre es die benötigtetn module/Prozeduren in eine INC datei auszulagern und diese dann einfach mit include einbinden - geht übrigens mit *.asm auch (mit INCs hat man aber noch weniger Stress, bzw. wenn man komplette ASM Quelltexte einbindet, dann mekert der Compiler wegen den Neudefinierungen rum)
Je nach Anforderungen würde ich zur Projektverwaltung RADASM IDE emfehlen (radasm.visualassembler.com/). Lässt sich für alle Assemlies einsetzen und ist schön übersichtlich (zum Teil vergleichbar mit VC++ umgebung)
Roll9 proto
dann läufts. Warum das mit Exertn nicht funktionier kann ich nicht sagen.
Aber einfacher wäre es die benötigtetn module/Prozeduren in eine INC datei auszulagern und diese dann einfach mit include einbinden - geht übrigens mit *.asm auch (mit INCs hat man aber noch weniger Stress, bzw. wenn man komplette ASM Quelltexte einbindet, dann mekert der Compiler wegen den Neudefinierungen rum)
Je nach Anforderungen würde ich zur Projektverwaltung RADASM IDE emfehlen (radasm.visualassembler.com/). Lässt sich für alle Assemlies einsetzen und ist schön übersichtlich (zum Teil vergleichbar mit VC++ umgebung)