Data Flow in Fortran MEX Files
Showing Data Input and Output
Suppose that your MEX file myFunction has two input
arguments and one output argument. The MATLAB® syntax is [X] = myFunction(Y, Z). To
call myFunction from MATLAB, type:
X = myFunction(Y, Z);
The MATLAB interpreter calls mexFunction, the
gateway routine to myFunction, with these
arguments:

Your input is prhs, a two-element array
(nrhs = 2). The first element is a pointer to
an mxArray named Y and the
second element is a pointer to an mxArray named
Z.
Your output is plhs, a one-element array
(nlhs = 1) where the single element is a
null pointer. The parameter
plhs points at nothing because the output
X is not created until the subroutine
executes.
The gateway routine creates the output array and sets a pointer to it
in plhs[0]. If the routine does not assign a value
to plhs[0] but you assign an output value to the
function when you call it, MATLAB generates an error.
Note
It is possible to return an output value even if nlhs =
0, which corresponds to returning the result in
the ans variable.
Gateway Routine Data Flow Diagram
This MEX Cycle diagram shows how inputs enter a MEX file, what functions the gateway routine performs, and how outputs return to MATLAB.
In this example, the syntax of the MEX file func is
[C, D] = func(A,B). In the figure, a call to
func tells MATLAB to pass variables A and
B to your MEX file. C and
D are left unassigned.
The gateway routine uses the
mxCreate* functions to create the MATLAB arrays for your output arguments. It sets
plhs[0] and plhs[1] to the
pointers to the newly created MATLAB arrays. It uses the mxGet* functions
to extract your data from your input arguments
prhs[0] and prhs[1].
Finally, it calls your computational routine, passing the input and
output data pointers as function parameters.
MATLAB assigns plhs[0] to C and
plhs[1] to D.
Fortran MEX Cycle
