Вывод сообщения об ошибке с идентификатором и возврат к подсказке 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 ®
Cprintf функция. Кодировка для текста сообщения и аргументов преобразования должна быть одинаковой.
...В языке 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