我正在通过" Matlab编码器"将MATLAB编写的函数转换为C.获得转换后的文件后,转换后的函数始终具有第一个输入参数const emlrtStack *sp
。现在,当我尝试在VC ++ 2013上测试它时,IntelliSense会给出上面提到的错误。
我手动尝试在emlrt.h
文件中找到此标识符,但那里没有这样的东西。我试图用两个输入参数转换一个简单的乘法函数[比如, c = mul(a,b) ]但是转换后的函数在函数内部还有这个额外的参数除了 a 和 b 之外。
(这意味着这个参数不是特定于功能的)。
如果某人有解决方法或遇到过此类问题,请分享或帮助。
此外,如果有人知道如何简单地测试这些转换后的功能,那将是一个非常受欢迎的额外帮助。
答案 0 :(得分:1)
可能是为MEX函数而不是独立目标生成的代码。 MEX函数是用C,C ++或Fortran编写的二进制文件,可以像普通的MATLAB函数一样调用。生成代码以生成MEX函数允许两件事。首先,您可以在MATLAB中测试生成的代码,因为您可以像使用任何其他函数一样从MATLAB调用MEX函数。在生成代码并尝试调用它之后,查找名为mul_mex.mex*
的文件:mul_mex(1,2)
。生成MEX函数的另一个用途是它通常比生成它的MATLAB代码更快。 MEX函数仅在MATLAB的上下文中使用。
您看到的参数emlrtStack*
出现在MEX生成的代码中,以帮助进行运行时错误报告。它不存在于设计为在MATLAB外部运行的独立代码中。
如果要在Visual Studio中使用生成的代码,或在MATLAB外部使用,则应选择其中一个独立目标,LIB,DLL或EXE。 This page显示了如何更改输出类型。总而言之,如果使用命令行,您可以说:
cfg = coder.config('lib'); %or 'dll' or 'exe'
codegen mul -config cfg -args {1,2}
如果使用项目界面,则单击Build
选项卡,然后在"输出类型"中选择静态库或共享库。下拉菜单。
我建议阅读this example,演示如何在Visual Studio中使用生成的DLL。