Я конвертирую написанную в MATLAB функцию в C с помощью «Matlab coder». После того, как я получу преобразованные файлы, у преобразованной функции всегда будет первый входной аргумент как const emlrtStack *sp
, Теперь, когда я пытаюсь протестировать его на VC ++ 2013, IntelliSense выдает указанную выше ошибку.
Я вручную пытался найти этот идентификатор в emlrt.h
файл, но нет такой вещи там нет. Я пытался преобразовать простую функцию умножения с двумя входными аргументами [как, с = мул (а, б)] но все же преобразованная функция имеет этот дополнительный аргумент внутри функции в дополнение к а также б.
(что означает, что этот аргумент не зависит от функции).
Если у кого-то есть решение этой проблемы или у вас возникла такая проблема, пожалуйста, поделитесь или помогите.
Более того, если кто-то знает, как просто протестировать эти преобразованные функции, будет очень полезна дополнительная помощь.
Вполне вероятно, что код, который был создан для 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.