Вызовите функцию MATLAB, пользовательскую функцию или файл MEX
#include "fintrf.h" integer*4 mexCallMATLAB(nlhs, plhs, nrhs, prhs, functionName) integer*4 nlhs, nrhs mwPointer plhs(*), prhs(*) character*(*) functionName
nlhs
Количество выходных аргументов. Должно быть меньше чем или равно 50.
plhs
Массив указателей на выходные аргументы
Аргумент plhs
для mexCallMATLAB
не является тем же самым как plhs
для mexFunction
. Не уничтожайте mxArray
, возвращенный в plhs
для mexFunction
.
nrhs
Количество входных параметров. Должно быть меньше чем или равно 50.
prhs
Массив указателей на входные параметры
functionName
Символьная строка, содержащая имя встроенной функции MATLAB®, оператора, пользовательской функции или MEX-функции, чтобы вызвать.
Если functionName
является оператором, поместите оператор в паре одинарных кавычек, например, '+'
.
0
в случае успеха и ненулевое значение, если неудачный.
Вызовите mexCallMATLAB
, чтобы вызвать внутренние числовые функции MATLAB, операторы MATLAB, пользовательские функции или другие файлы MEX. И mexCallMATLAB
и mexEvalString
выполняют команды MATLAB. Используйте mexCallMATLAB
для возврата результатов (аргументы левой стороны) назад к MEX-функции. Функция mexEvalString
не делает возвращаемых значений к MEX-функции.
Для полного описания аргументов ввода и вывода, переданных functionName
, смотрите mexFunction
.
Если functionName
обнаруживает ошибку, MATLAB отключает файл MEX и возвращает управление в посдказку MATLAB. Чтобы захватить ошибки, используйте функцию mexCallMATLABWithTrap
.
Избегайте использования функции mexCallMATLAB
в S-функциях Simulink®. Если вы делаете, не храните получившийся plhs
указатели mxArray
ни в каком состоянии Блока s-function, которое сохраняется после того, как MEX-функция заканчивается. Выходные параметры mexCallMATLAB
имеют временный осциллограф и автоматически уничтожаются в конце вызова MEX-функции.
Возможно сгенерировать объект типа mxUNKNOWN_CLASS
с помощью mexCallMATLAB
. Например, эта функция возвращает две переменные, но только присваивает одного из них значение.
function [a,b] = foo(c) a = 2*c;
Если вы затем вызываете foo
с помощью mexCallMATLAB
, неприсвоенная выходная переменная является теперь типом mxUNKNOWN_CLASS
.
Смотрите эти примеры в
:matlabroot/extern/examples/refbook
Смотрите эти примеры в
:matlabroot/extern/examples/mx
MATLAB выделяет динамическую память, чтобы сохранить массивы в plhs
для mexCallMATLAB
. MATLAB автоматически освобождает динамическую память, когда вы выходите из файла MEX. Однако, если пространство "кучи" в большом почете, вызовите mxDestroyArray
, когда вы закончены с массивами в plhs
.
mexCallMATLABWithTrap
| mexEvalString
| mexFunction
| mxDestroyArray