Скачал и экстрагируют MASM32 + в SDK со следующего веб-сайта: http://www.masm32.com/masmdl.htmmasm32 - «Нерешенные внешние символы» с подчеркиванием, а связывающие
я затем компилируется и связаны следующую программу с помощью ml.exe и link.exe:
.386
.model flat, stdcall
; Windows libraries
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
extrn [email protected] : PROC
extrn [email protected] : PROC
option casemap:none ; Treat labels as case-sensitive
.DATA ; Begin initialized data segment
ProgramTitle db "Hello, puny humans!", 0 ; define byte
DisplayText db "Wahahaha", 0
.CODE ; Begin code segment
_main PROC
push 0
mov eax, offset ProgramTitle
push eax
push offset DisplayText
push 0
call [email protected]
call [email protected]
ret
_main ENDP
END
командной строки:
ml /c test.asm
link /entry:_main /subsystem:windows test.obj
Выход:
ml /c test.asm
Assembling: test.asm
link /entry:_main /subsystem:windows test.obj
test.obj : warning LNK4033: converting object format from OMF to COFF
test.obj : error LNK2001: unresolved external symbol [email protected]
test.obj : error LNK2001: unresolved external symbol [email protected]
test.exe : fatal error LNK1120: 2 unresolved externals
Попытка запустить DUMPBIN на файл .obj: (. Ml.exe v 6,14)
Dump of file test.obj
test.obj : warning LNK4048: Invalid format file; ignored
Summary
Это кажется странным, что я не могу связать файлы, использующие функциональные возможности по умолчанию MASM32 и библиотеки, которые включены в комплект поставки.
Если вы используете MASM32 нет никакой необходимости использовать неудобный синтаксис как 'EXTRN MessageBoxA @ 16: MessageBoxA PROC' /' вызов @ 16'. Вы могли бы просто включить user32.inc и сделать 'invoke MessageBoxA NULL, ADDR DisplayText, ADDR ProgramTitle, NULL' – Michael