"error: Invalid use of" reported by macro

Started by Vortex, May 02, 2025, 01:32:26 PM

Previous topic - Next topic

Vortex

Hello,

The macro @loc reports the following error messages :

Test.asm(33): error: Invalid use of '@loc'.
Test.asm(33): error: Invalid use of '('.
Test.asm(34): error: Invalid use of '@loc'.
Test.asm(34): error: Invalid use of '('.
Test.asm(35): error: Invalid use of '@loc'.
Test.asm(35): error: Invalid use of '('.

Test code :

.386
.model flat,stdcall
option casemap:none

ExitProcess PROTO :DWORD

RECT STRUCT
  left    dd      ?
  top     dd      ?
  right   dd      ?
  bottom  dd      ?
RECT ENDS

VarSize=0

@loc MACRO _type

    VarSize=VarSize + SIZEOF(_type)

    EXITM <_type>

ENDM

.code

start:

    call    main
    invoke  ExitProcess,0

main PROC

LOCAL rc:@loc(RECT)
LOCAL x:@loc(DWORD)
LOCAL y:@loc(DWORD)
 
    mov  eax,VarSize
    ret

main ENDP

END start

Tested with Poasm Version 13.00.49
Code it... That's all...

Vortex

I have a practical solution :

.386
.model flat,stdcall
option casemap:none

ExitProcess PROTO :DWORD

RECT STRUCT
  left    dd      ?
  top     dd      ?
  right   dd      ?
  bottom  dd      ?
RECT ENDS

VarSize=0

LOCV MACRO var,_type

    VarSize=VarSize + SIZEOF(_type)

    LOCAL var : _type

ENDM

.code

start:

    call    main
    invoke  ExitProcess,0

main PROC

LOCV rc,RECT
LOCV x,DWORD
LOCV y,DWORD
 
    mov  eax,VarSize
    ret

main ENDP

END start
Code it... That's all...