Я преобразовываю написанную функцию MATLAB в C с помощью "Matlab coder". После получения преобразованных файлов преобразованная функция всегда имеет первый входной аргумент как const emlrtStack *sp
. Теперь, когда я пытаюсь проверить его на VC++ 2013, IntelliSense дает упомянутую выше ошибку.
Я вручную попытался найти этот идентификатор в файле emlrt.h
но такой вещи там нет. Я попытался преобразовать простую функцию умножения с двумя входными аргументами [например, c = mul (a, b) ], но все же преобразованная функция имеет дополнительный аргумент внутри функции в дополнение к a и b. (что означает, что этот аргумент не зависит от функции).
Если у кого-то есть решение или возникли такие проблемы, пожалуйста, поделитесь или помогите.
Более того, если кто-то знает, как просто протестировать эти преобразованные функции, это будет очень ценная дополнительная помощь.
Вероятно, код, который был сгенерирован для функции MEX, а не для отдельной цели. Функции MEX представляют собой исполняемые файлы C, C++ или Fortran, которые могут быть вызваны как обычная функция MATLAB. Генерирование кода для создания функции MEX допускает две вещи. Во-первых, вы можете протестировать свой сгенерированный код в MATLAB, потому что вы можете вызывать функцию MEX из MATLAB, как и любую другую функцию. Найдите файл с именем mul_mex.mex*
после генерации кода и попробуйте назвать его: mul_mex(1,2)
. Другое использование для генерации функции MEX состоит в том, что она часто может быть быстрее, чем код MATLAB, из которого он был сгенерирован. Функции MEX используются только в контексте MATLAB.
Параметр emlrtStack*
который вы видели, появляется в сгенерированном коде MEX, чтобы помочь в отчетах об ошибках во время выполнения. Он отсутствует в автономном коде, который предназначен для запуска за пределами MATLAB.
Если вы хотите использовать сгенерированный код в Visual Studio или вне MATLAB, вы должны выбрать одну из автономных целей - LIB, DLL или EXE. На этой странице показано, как изменить тип вывода. Подводя итог, если вы используете командную строку, вы можете сказать:
cfg = coder.config('lib'); %or 'dll' or 'exe'
codegen mul -config cfg -args {1,2}
При использовании интерфейса проекта вы нажимаете на вкладку " Build
" и выбираете статическую библиотеку или общую библиотеку в раскрывающемся меню "Тип вывода".
Я бы рекомендовал прочитать этот пример, демонстрирующий, как использовать сгенерированную DLL в Visual Studio.