cCall


include vmm.inc

cCall Procedure
cCall Procedure, Param1, Flags
cCall Procedure, <Param1, Param2, Param3, ..., ParamN>, Flags

Pushes the specified parameters on the stack and calls the specified procedure. When the procedure returns, the macro pops the parameters from the stack.

Procedure

Name of the procedure to call. This parameter can be either a local or public procedure, but must be defined within the virtual device making the call.

Param1, Param2, Param3, ..., ParamN

Optional parameters to pass to the procedure. If more than one parameter is given, they must be separated with commas and enclosed in angle brackets (<>).

Flags

Optional parameter, that if set to the value PRESERVE_FLAGS, causes the cCall macro to preserve the flags register on return from the called procedure. The cCall macro normally changes the contents of the flags register as part of its cleanup operations.

This macro pushes the parameters using the C-language calling convention, in order from right to left, then removes the parameters from the stack after the procedure returns. It also assumes that the called procedure follows the C-language register conventions, viz., that the EAX, ECX, EDX, and flags registers may be modified by the call, and that the return value is placed in the EAX register (and sometimes also the EDX register). If your procedure does not follow these rules, you should not use the cCall macro.

See also VMMCall, VxDCall