MASM32 - LINK ругается на @

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Welemir, 8 Aug 2010.

  1. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Ночи доброй.Может,кто прояснит ситуацию,почему CALL идёт с ошибкой:


    Code:
    
    .386
    .model flat,stdcall
    
    includelib C:\winasm\masm32\lib\user32.lib
    includelib c:\winasm\masm32\lib\kernel32.lib
    include C:\winasm\masm32\include\user32.inc
    include c:\winasm\masm32\include\kernel32.inc
    
    
    .data
        
        message db "I`ve got a power!",0
        title db "This is the title of my program",0
    
    
    .code
    
    start:
    
    
    push 0
    push offset message
    push offset title
    push 0
    call MessageBox@16
    
    
      
    
    end  start
    
    end;
    
    
    



    C:\winasm\masm32\bin\ML /c /coff /Cp /nologo /I"C:\winasm\masm32\include" "C:\winasm\Projects\aaa.asm"

    Assembling: C:\winasm\Projects\aaa.asm
    C:\winasm\Projects\aaa.asm(23) : error A2008: syntax error : title
    C:\winasm\Projects\aaa.asm(22) : error A2006: undefined symbol : message
    C:\winasm\Projects\aaa.asm(25) : error A2006: undefined symbol : MessageBox@16

    C:\winasm\masm32\bin\Link @"C:\winasm\Projects\link.war"

    Microsoft (R) Incremental Linker Version 5.12.8078
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

    /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 "/LIBPATH:C:\winasm\masm32\lib" "C:\winasm\Projects\aaa.obj" "/OUT:C:\winasm\Projects\aaa.exe"
    LINK : fatal error LNK1181: cannot open input file "C:\winasm\Projects\aaa.obj"

    Make finished. 4 error(s) occured

    INVOKE норм работает...


    Среда: WinAsm
    Проект: Standart EXE (win32)
     
  2. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Хм.LINK ругается только на символ @...но без него всё работает.т.е. учёт количества и размера параметров происходит без не нужных затрат.С чего бы это ?
     
  3. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Welemir наверно потому что функции MessageBox не существует.
    MessageBoxA, MessageBoxW
     
    _________________________
  4. ph0enix.re

    ph0enix.re New Member

    Joined:
    4 Aug 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    2Welemir
    С того это, что в заголовочных файлах прописан прототип функции. Поэтому инвойк работает нормально. А в той модели, в которой ты вызывал функцию, подсчет параметров для ассемблера вообще не нужен, тк ты всем управляешь. И да, Гарик прав =)
     
  5. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    ээ,как функции месаджбокс нету ? Я же её использую :).Ладно,работает.и пусть работает дальше.
     
  6. ph0enix.re

    ph0enix.re New Member

    Joined:
    4 Aug 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    возможно в вашей версии масма были определены они так. В реальности из user32.dll экспортируются только MessageBoxA/W. Поищите в user32.inc если интересно на что указывает MessageBox (это будет либо A либо W версия функции)