c++ - Matlab legacy_code 工具 - 编写包装函数来捕获数组

标签 c++ matlab methods simulink legacy-code

目前我正在尝试通过 Matlab legacy_code 工具在 Matlab/Simulink 中使用基于 C/C++ 代码的库。我对此很陌生,请耐心等待。

我偶然发现了这个问题,我得到了返回数组的类成员。

我现在所做的是遵循 Matlab 遗留代码示例,尤其是这个示例:

Integrate External C++ Object Methods

据我所知,legacy_code 工具需要一个包装函数来包装方法调用,所以基本上我可以在这个包装函数内以任何必要的方式操纵被调用方法的返回值。到目前为止没问题。

但是,我不确定如何从调用的方法接收信息数组,然后将此数组传递给 Matlab/Simulink。

例如方法的返回值是一个指向信息数组的指针,假设我们知道其中包含的有效信息的长度。

/* Simple example */

uint8_t* BUS::answerRcvd()
{
   static int  r[10];
   int i;


   srand( (unsigned)time( NULL ) );

    for ( i = 0; i < 10; ++i)
    {
        r[i] = rand();
    }

    return r;
}

有没有办法为这种方法创建一个包装函数来接收一组信息并将其传递给 matlab?

是否有可能处理该数组,例如uint8_t 的单个值(如果方法与给定示例保持一致)并像在普通 matlab 函数中一样传递这些值?

[a,b,c] = function()

我愿意接受任何建议,在此先感谢您。

最佳答案

好的,看来我找到了解决问题的方法。

作为包装函数,可以使用以下模式

void myfunc(double u1, double u2, double u3, double *y1, double *y2)
{
    *y1=u1;
    *y2=(u2+u3)/2;
}

此包装函数然后由遗留代码工具 (LCT) 进行接口(interface),如下所示:

def = legacy_code('initialize')
def.OutputFcnSpec = 'void myfunc(double u1, double u2, double u3, double y1[1], double y2[1])'

就这么简单。在 C/C++ 代码中使用指针命名法/语法,在 Matlab 中使用数组命名法/语法。

我希望这能帮助像我这样的人,他们需要一个解决方案来与遗留代码交互,遗留代码不仅应该接受多个输入,还应该接受多个输出。

事后看来,选项 tuuse pointers 非常明显,但如果您不知道如何教您的 LCT 如何与之交互,它很容易成为一项累人的任务。

关于c++ - Matlab legacy_code 工具 - 编写包装函数来捕获数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41027587/

相关文章:

c++ - 为什么我们需要绑定(bind) std::cin 和 std::cout?

c++ - 为什么装饰模式适用于指针而不适用于引用?

c++ - 石头剪刀布的麻烦

matlab - 错误 : version `GLIBCXX_3.4.21' not found

swift - 为什么 Swift 中函数的第一个参数名在调用时不需要?

C++类设计: member and local variables

matlab - 没有矩阵的多变量梯度下降

matlab - 使用 FFT、PSD 和 STFT 进行音频特征提取并查找最强大的频率

php - 结帐前更改购物车项目订阅属性值

java - 为什么我的上一个方法没有打印出来?我怎样才能让它执行