windows.inc Fehlermeldungen, wieso
-
Hy
wollte gerage mein erstes Assembler Windowsprogramm testen und da bekomme ich viele Fehlermeldungen von windows.inc, wieso??
.386 .model flat IFDEF masm option casemap :none ENDIF include C:\masm32\include\windows.inc IFDEF masm MessageBoxA equ _MessageBoxA@16 Exitprocess equ _ExitProcess@4 ENDIF extrn ExitProcess : near extrn MessageBoxA : near .data MessageBoxTITEL db "TITEL",0 MessageBoxINHALT db "INHALT",0 .code _anfang: push MB_ICONHAND or MB_OKCANCEL push offset MessageBoxTITEL push offset MessageBoxINHALT push 0 call MessageBoxA push ErrorCode call ExitProcess end _anfang
Fehlermeldungen:
C:\masm32\include\windows.inc(60) : error A2119:language type must be specified C:\masm32\include\windows.inc(61) : error A2119:language type must be specified C:\masm32\include\windows.inc(62) : error A2119:language type must be specified C:\masm32\include\windows.inc(63) : error A2119:language type must be specified C:\masm32\include\windows.inc(64) : error A2119:language type must be specified C:\masm32\include\windows.inc(65) : error A2119:language type must be specified C:\masm32\include\windows.inc(66) : error A2119:language type must be specified C:\masm32\include\windows.inc(67) : error A2119:language type must be specified C:\masm32\include\windows.inc(68) : error A2119:language type must be specified C:\masm32\include\windows.inc(69) : error A2119:language type must be specified C:\masm32\include\windows.inc(70) : error A2119:language type must be specified C:\masm32\include\windows.inc(71) : error A2119:language type must be specified C:\masm32\include\windows.inc(72) : error A2119:language type must be specified C:\masm32\include\windows.inc(73) : error A2119:language type must be specified C:\masm32\include\windows.inc(74) : error A2119:language type must be specified C:\masm32\include\windows.inc(75) : error A2119:language type must be specified C:\masm32\include\windows.inc(76) : error A2119:language type must be specified C:\masm32\include\windows.inc(77) : error A2119:language type must be specified C:\masm32\include\windows.inc(78) : error A2119:language type must be specified C:\masm32\include\windows.inc(79) : error A2119:language type must be specified C:\masm32\include\windows.inc(80) : error A2119:language type must be specified C:\masm32\include\windows.inc(81) : error A2119:language type must be specified C:\masm32\include\windows.inc(82) : error A2119:language type must be specified C:\masm32\include\windows.inc(83) : error A2119:language type must be specified C:\masm32\include\windows.inc(84) : error A2119:language type must be specified c:\masm32\firstwindow.asm(28) : error A2006:undefined symbol : ErrorCode
-
Was soll das "IFDEF masm"? - da die Konstante 'masm' nicht definiert ist, wird die für die windows.inc benötigte Unterscheidung zwischen groß und Kleinschreibung nicht aktiviert.
Zudem fehlt bei '.model' noch die Definition der Default-Aufrufkonvention: '.model flat, stdcall'. sdtcall ist dann die Aufrufkonv. die gilt, wenn explizit keine andere angegeben wird (bei der Definition von Funktionen).error A2006:undefined symbol : ErrorCode
das spricht für sich selber
Am einfachsten ist es, wenn du die masm32rt.inc verwendest:
include masm32rt.inc ; hier solltest du mal einen Blick rein werfen .data MessageBoxTITEL db "TITEL",0 MessageBoxINHALT db "INHALT",0 ErrorCode dd 0 .code _anfang: ;push MB_ICONHAND or MB_OKCANCEL ;push offset MessageBoxTITEL ;push offset MessageBoxINHALT ;push 0 ;call MessageBoxA ;push ErrorCode ;call ExitProcess ; ==> das gleiche nur etwas übersichtlicher: invoke MessageBox,0,OFFSET MessageBoxINHALT,OFFSET MessageBoxTITEL,MB_ICONHAND or MB_OKCANCEL invoke ExitProcess,ErrorCode end _anfang
-
Hallo, danke für deine Antwort, ich habe dein batch File aus einer der forhergehenden Themen genommen und bekomme nach Test deines Codes immer einen Linker fehler:
\masm32\lib\masm32.lib : not valid libraryich glaube er findet diese Datei nicht, da ich ihm schon die Include Datei per
include C:\masm32\include\masm32rt.inc
so include, meine Frage wie teile ich dem Linker mit das er die Dateien auch dort findet???mfg
-
Wieso findet der Assembler alle include Dateien, aber der Linker findet die Libries nicht.
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive; include files
; ~~~~~~~~~~~~~
include \masm32\include\windows.inc ; main windows include file
include \masm32\include\masm32.inc ; masm32 library include; -------------------------
; Windows API include files
; -------------------------
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\Comctl32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\shell32.inc
include \masm32\include\oleaut32.inc
include \masm32\include\ole32.inc
include \masm32\include\msvcrt.incinclude \masm32\include\dialogs.inc ; macro file for dialogs
include \masm32\macros\macros.asm ; masm32 macro file; libraries
; ~~~~~~~~~
includelib \masm32\lib\masm32.lib ; <-----Da ist der Fehler; ------------------------------------------
; import libraries for Windows API functions
; ------------------------------------------
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\Comctl32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\shell32.lib
includelib \masm32\lib\oleaut32.lib
includelib \masm32\lib\ole32.lib
includelib \masm32\lib\msvcrt.lib
-
myfirstwindow schrieb:
ich habe dein batch File aus einer der forhergehenden Themen
besagte Batch ist zum erstellen von 16-Bit Programmen (DOS) - Du möchtest 32Bit GUI-Programme für Windows erstellen. Im Verzeichnis C:\masm32\ findest du den Qeditor -> Zum erstellen: Öffne die Quelldatei (*.asm) und anschließend -> Menü->Project->Build All. Ansonsten kann ich dir nur RadAsm empfehlen.
Hier noch mal die richtige Batch (falls du das bevorzugst):
@echo off if not exist %~n1.asm goto nofile if exist %1.obj del %~n1.obj if exist %1.exe del %~n1.exe @echo on \masm32\bin\ml.exe /c /coff /I"C:\masm32\include" %~n1.asm \masm32\bin\Link.exe /SUBSYSTEM:WINDOWS /LIBPATH:"\masm32\lib" %~n1.obj @echo off goto end :nofile echo invalid source file :end pause @echo off
-
Hey, danke für deine Antwort, jetzt funktioniert alles perfekt!!