News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests

Main Menu

Quick procedure definition macros

Started by Vortex, March 30, 2024, 08:50:14 PM

Previous topic - Next topic

Vortex

QPROC ( Quick procedure ) macro :

QPROC MACRO fname:REQ,arguments:VARARG

LOCAL temp

    temp TEXTEQU <>

    FOR arg,<arguments>
   
        temp CATSTR temp,<arg>,<:DWORD,>

    ENDM

    fname PROC @SubStr(temp,1,@SizeStr(temp)-1)

ENDM

Replacing the traditional procedure definition :

WinMain PROC hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
QPROC WinMain,hInst,hPrevInst,CmdLine,CmdShow

sinsi

Unlikely, but what if arguments is blank?

Vortex

Hi sinsi,

If there are no arguments, it means that the procedure does not take any parameters so no need to use the macro.

sinsi

That's why I said unlikely, but consider how many people use
    invoke InitCommonControls
Just curious, but which part would poasm throw an error? The FOR part or @SubStr?

Vortex

Hi sinsi,

invoke InitCommonControls
This call has nothing to do with my macro. InitCommonControls is a procedure stored in comctl32.dll

sinsi

OK, poor example, it was just to illustrate that people follow habits, so if they see a lot of QPROCs they might think that's the way to do it.

WinMain PROC hInst,hPrevInst,CmdLine,CmdShow
QPROC WinMain,hInst,hPrevInst,CmdLine,CmdShow
Not a great deal of difference - or does poasm expect the size as well?


Vortex

Hi sinsi,

Jochen informed me about the case, this declaration is accepted by Poasm so my macro is useless :

WinMain PROC hInst,hPrevInst,CmdLine,CmdShow

Vortex

This is for Poasm 64-bit, the PROCX macro sets automatically the PARMAREA value   :

PROCX MACRO functionname:REQ,args:VARARG

fname TEXTEQU functionname

    functionname PROC args PARMAREA=16*QWORD

ENDM

ENDPX MACRO

    fname ENDP

ENDM

The maximum number of parameters ( 16 by default ) can be modified easily.