Отобразите сообщение об ошибке с идентификатором и вернитесь к подсказке MATLAB
#include "mex.h" void mexErrMsgIdAndTxt(const char *errorid, const char *errormsg, ...);
#include "fintrf.h" subroutine mexErrMsgIdAndTxt(errorid, errormsg) character*(*) errorid, errormsg
errorid
Строка , содержащая MATLAB® идентификатор сообщения. Для получения информации о создании идентификаторов смотрите MException
.
errormsg
Строка для отображения, заданная как const char*
на C или character*(*)
на Фортране. На C функция поддерживает UTF-8 или локальную кодировку на странице кода (LCP), и строка может включать спецификации преобразования, используемые ANSI® C
printf
функция. Кодировка для текста сообщения и аргументов преобразования должна быть одинаковой.
...
На C все аргументы, используемые в сообщении. Каждый аргумент должен иметь соответствующую спецификацию преобразования. Обратитесь к документации на C для printf
таблицы преобразования.
mexErrMsgIdAndTxt
функция запишет сообщение об ошибке в окно MATLAB. Для получения дополнительной информации смотрите error
оператор синтаксиса функции с использованием идентификатора сообщения. После печати сообщения об ошибке MATLAB завершает работу файла MEX и возвращает управление в подсказку MATLAB.
Вызов mexErrMsgIdAndTxt
не очищает файл MEX из памяти. Итак, mexErrMsgIdAndTxt
не вызывает функцию, зарегистрированную через mexAtExit
.
Если ваше приложение позвонило mxCalloc
или один из mxCreate
* стандартные программы для выделения памяти, mexErrMsgIdAndTxt
автоматически освобождает выделенную память.
Примечание
Если вы получаете предупреждения при использовании mexErrMsgIdAndTxt
, у вас может быть проблема совместимости управления памятью. Для получения дополнительной информации см. раздел «Проблемы управления памятью».
В дополнение к errorid
и errormsg
, mexErrMsgIdAndTxt
функция определяет, где произошла ошибка, и отображает следующую информацию. Для примера в функции foo
, mexErrMsgIdAndTxt
отображает:
Error using foo
Если вы скомпилируете файл MEX с помощью компилятора MinGW-w64, смотрите ограничения, за исключением темы обработки в разделах Поиск и устранение проблем и ограничений при компиляции файлов C/C + + MEX с MinGW-w64.
См. эти примеры в
:matlabroot
/ extern/examples/refbook
char
ВходСледующий фрагмент кода проверяет, входной параметр ли, prhs[0]
, является строкой. Если нет, в коде отображается предупреждение. При ошибке чтения входа строки код выводит сообщение об ошибке и завершает работу файла MEX.
char *buf; int buflen; // initialize variables if (mxIsChar(prhs[0])) { if (mxGetString(prhs[0], buf, buflen) == 0) { mexPrintf("The input string is: %s\n", buf); } else { mexErrMsgIdAndTxt("MyProg:ConvertString", "Could not convert string data."); // exit MEX file } } else { mexWarnMsgIdAndTxt("MyProg:InputString", "Input should be a string to print properly."); } // continue with processing