Assembler error A2006: undefined symbol: msg



  • Hallo,
    bei folgendem Code bekomme ich immer o.g. Fehler beim assemblieren:

    .386
    .model flat,stdcall
    
    includelib c:\masm32\lib\kernel32.lib
    includelib c:\masm32\lib\user32.lib
    
    MessageBoxA proto :dword, :dword, :dword, :dword
    ExitProcess proto :dword
    
    .data
    titel db "test",0
    text db "auf Ok, klicken",0
    
    .code
    start:
    		push 40h
    		call msg
    
    		push 0
    		call ExitProcess
    end start
    
    msg proc
    		mov ebx,30h
    		ret
    msg endp
    

    Verstehe ich nicht ganz, da ich doch die Prozedur msg definiert habe...
    Wie kann der Assembler sie dann nicht finden?

    Vielen Dank im Voraus.

    grüße



  • die Prozedur ist an der Stelle des Aufrufs noch nicht bekannt -> deklarier den Prototypen vor dem Aufruf (msg PROTO)



  • Außerdem befindet sich die Prozedur msg außerhalb MASMs 'Sichtbereich'(end start)



  • masm schrieb:

    Außerdem befindet sich die Prozedur msg außerhalb MASMs 'Sichtbereich'(end start)

    Ah, daran lags^^, das mit proto hat nicht geklappt, da hat denn der Linker gemeckert wegen external symbol.

    Vielen Dank für deine Hilfe 🙂



  • raufaser schrieb:

    masm schrieb:

    Außerdem befindet sich die Prozedur msg außerhalb MASMs 'Sichtbereich'(end start)

    Ah, daran lags^^, das mit proto hat nicht geklappt, da hat denn der Linker gemeckert wegen external symbol.

    Vielen Dank für deine Hilfe 🙂

    Wenn man PROTOs deferiert, kann man die Funktionen auch mittels INVOKE aufrufen. Gemeckert hat der Linker im Übrigen, da die Funktion schlicht und einfach nicht existiert hat 😉


Anmelden zum Antworten