Отобразите сообщение об ошибке с идентификатором и вернитесь к подсказке 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