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 library

    ich 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.inc

    include \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!!


Anmelden zum Antworten