【发布时间】:2015-09-28 14:37:38
【问题描述】:
我已经使用 Visual Studio 2012 实现了一个复杂的mexFunction,并成功地将它与 Matlab 集成。 (我们称之为mexFunctionA.mexw32)
当我在 matlab 命令窗口中运行这个命令时,我得到了预期的结果:
mexFunctionA("My1Argument", "My2Argument");
现在,我需要开发一个调用mexFunctionA 的mexFunctionB; 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方法错误。 - 编译代码的命令行错误。
- 无法按照我的计划进行。
- 别的东西。
有人知道怎么解决吗?
【问题讨论】:
-
你为什么要这样做?为什么不使用 mexfunction 作为包装器,在里面调用真正的函数?如果你这样做,你就不会有问题,因为你会调用真正的函数,而不是被设计为 MATLAB-C 接口的东西。
-
这是一个中肯的问题。不知何故很难解释原因,但简单的答案是:这两个函数都访问存储在内存中的一些数据。因此,他们需要访问相同的数据才能产生相同的结果。
-
如果你有一个函数可以做一些不会改变的事情。我的观点:不要使用
mexA-call>mexB之类的东西@ 987654332@ 其中mexA->fun和mexB->fun。问题解决了 -
@AnderBiguri :您所说的一切都是正确的,但是由于我的函数的特定实现和要求,调用 mexA->fun 和 mexB->fun 将分配 2 个不同的内存块,因此会产生不同的结果。我应该在我的问题中明确说明这种行为以避免混淆。对不起。
标签: c++ matlab simulink mex s-function