Hi physix
Welcome to the forum.
This:
include Functions.asm
is nonsense, wait until you have to include "Functions.asm" in another module file in the same project.
I don't know about VS18, still stuck on 15 (If it ant broken). So you have only one "MAIN" Module File
which you have added to your project, it looks like this:
TITLE Main.asm By Caché GB
.686p
.xmm
.model flat, stdcall
option casemap:none
option scoped
option dotname
option proc:private
ifndef _UNICODE_
_UNICODE_ equ 1
endif
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include MyModule.inc
;#############################################################################################################
.const
ID_XXX01 equ 12345
ID_XXX02 equ 12346
.data
MyString db "I know what you did last summer", 0
MsgBoxTitle db "From Main.asm .................", 0
.data?
hInst dd ?
.code
;#############################################################################################################
;#############################################################################################################
EntryPoint:
FNINIT
invoke GetModuleHandle, 0h
mov hInst, eax
invoke GetCommandLine
invoke wWinMain, hInst, 0h, eax, SW_NORMAL
invoke ExitProcess, 0
;############################################################################################################
wWinMain proc hInstance:dword, hPrevInst:dword, CmdLine:ptr word, CmdShow:dword ; proto in windows.inc
local TheStringsLen:dword
invoke MessageBoxA, null, addr MyString, addr MsgBoxTitle, MB_OK
invoke HelloWorld
invoke lszLen, addr MyString
mov TheStringsLen, eax
ret
wWinMain endp
;#############################################################################################################
end EntryPoint
;#############################################################################################################
Now you add the following Module File (MyModule.asm) to your project :
Solution Explorer => On Project Name right-click => select Add > Existing Item.
Navigate to the File MyModule.asm and select it. Click Add.
It looks like this:
TITLE MyModule.asm By Caché GB
.686p
.xmm
.model flat, stdcall
option casemap:none
option scoped
option dotname
;; option proc:private
ifndef _UNICODE_
_UNICODE_ equ 1
endif
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.LIST
;#############################################################################################################
.const
ID_XXX01 equ 12345
ID_XXX02 equ 12346
.data
MyDword dd 54321
MyString db "In HelloWorld function ....", 0
MsgBoxTitle db "From MyModule.asm .........", 0
.data?
ThePTR dd ?
.code
;#############################################################################################################
;#############################################################################################################
HelloWorld proc
invoke MessageBoxA, null, addr MyString, addr MsgBoxTitle, MB_OK
mov eax, 1
ret
HelloWorld endp
;#############################################################################################################
lszLen proc pString:ptr byte
mov eax, dword ptr[pString]
lea ecx, [eax+1]
@@:
mov dl, byte ptr[eax]
add eax, 1
test dl, dl
jne @B
sub eax, ecx
ret
lszLen endp
;############################################################################################################
END ; MyModule.asm
;#############################################################################################################
Now you need the Include File (MyModule.inc).
.XCREF
.NOLIST
IFNDEF _MYMODULE_INC_
_MYMODULE_INC_ EQU 1
TITLE MyModule.inc By Caché GB
;#############################################################################################################
HelloWorld proto
lszLen proto pString:ptr byte
;#############################################################################################################
ENDIF ; _MYMODULE_INC_
;#############################################################################################################
Place MyModule.inc in a folder called " Includes". This folder "should" reside in the project's root.
Then right-click on the project in the Solution Explorer and select Properties.
“Configuration Properties->Microsoft Macro Assembler->General=>Include Paths->Edit..
Past this line:
$(SolutionDir)Includes
Click OK. Click Apply.
That's it you good to go.