### Restrictions on 16-Bit Calls and Callbacks (OS/2)

- The compiler ensures that no parameters or automatic variables of a function calling 16-bit code cross a 64K boundary. Any parameters or automatic variables of functions that do not call 16-bit code may cross 64K boundaries. Passing the address of the parameters or automatic variables to functions that pass them on to 16-bit code will result in an unreliable program.

  To solve this problem, copy the value passed into an automatic variable in the function that calls the 16-bit code. This automatic variable will not cross a 64K boundary.

- Memory returned by _alloca will not be tiled. If a function contains a call to _alloca, it should not also call 16-bit code, because parameters and automatic variables may then cross 64K boundaries.
- A 16-bit program cannot pass structures by value to a 32-bit callback function. The callback function cannot return structures by value to the 16-bit program that called it.
- The parameter area of the callback function cannot be larger than 120 bytes.
- Callback functions that take a variable number of arguments are not supported.
- Calling 16-bit code that takes a variable number of arguments is not supported.
- You cannot call 16-bit code from a 32-bit function that uses variable arguments.
- If an OS/2 exception handler must process an OS/2 guard page or an out-of-stack exception, calling a 16-bit function from within the exception handler may cause a recursive stack exception.

16-Bit Calling Conventions