从 cmex SFunction 调用 mex 函数
Call mex Function from cmex SFunction
我使用 visual studio 2012 实现了一个复杂的 mexFunction
,并成功地将其与 Matlab 集成。 (让我们称之为 mexFunctionA.mexw32
)
当我在matlab命令window中运行这个命令时,我得到了预期的结果:
mexFunctionA("My1Argument", "My2Argument");
现在,我需要开发一个 mexFunctionB
来调用 mexFunctionA
; mexFunctionB
尽可能简单。
我正在尝试的 C 代码(在 mexFunctionB.c
内)是:
#include "mexFunctionA.mexw32"
(...)
static void mdlOutputs(SimStruct *S, int_T tid)
{
mexFunctionA("My1Argument", "My2Argument");
}
(...)
这行代码没有编译。
我使用的命令行是:
mex -v mexFunctionB.c -I'C:\patchToMexFunctionA' -L'C:\patchToMexFunctionA' 'mexFunctionA.mexw32'
因此,以下是可能的错误:
#include
方法错误
- 编译代码的命令行错误
- 无法执行我计划执行的操作。
- 其他。
有人知道怎么解决吗?
您提供的代码没有意义。 .mexw32
文件是动态链接库(即 dll),在 C 代码中 #include
语句不用于包含 dll。
首先请注意,就您的 S-Function 而言,mexFunctionA
与任何其他 MATLAB 函数没有什么不同。所以你应该问的问题是 "how do I call a MATLAB function from within a mex file?".
答案是使用函数 mexCallMATLAB。
简而言之,您需要删除 #include
并将对 mexFunctionA
的调用重新格式化为 mexCallMATLAB
所需的格式。
我使用 visual studio 2012 实现了一个复杂的 mexFunction
,并成功地将其与 Matlab 集成。 (让我们称之为 mexFunctionA.mexw32
)
当我在matlab命令window中运行这个命令时,我得到了预期的结果:
mexFunctionA("My1Argument", "My2Argument");
现在,我需要开发一个 mexFunctionB
来调用 mexFunctionA
; mexFunctionB
尽可能简单。
我正在尝试的 C 代码(在 mexFunctionB.c
内)是:
#include "mexFunctionA.mexw32"
(...)
static void mdlOutputs(SimStruct *S, int_T tid)
{
mexFunctionA("My1Argument", "My2Argument");
}
(...)
这行代码没有编译。
我使用的命令行是:
mex -v mexFunctionB.c -I'C:\patchToMexFunctionA' -L'C:\patchToMexFunctionA' 'mexFunctionA.mexw32'
因此,以下是可能的错误:
#include
方法错误- 编译代码的命令行错误
- 无法执行我计划执行的操作。
- 其他。
有人知道怎么解决吗?
您提供的代码没有意义。 .mexw32
文件是动态链接库(即 dll),在 C 代码中 #include
语句不用于包含 dll。
首先请注意,就您的 S-Function 而言,mexFunctionA
与任何其他 MATLAB 函数没有什么不同。所以你应该问的问题是 "how do I call a MATLAB function from within a mex file?".
答案是使用函数 mexCallMATLAB。
简而言之,您需要删除 #include
并将对 mexFunctionA
的调用重新格式化为 mexCallMATLAB
所需的格式。