gpt4 book ai didi

c++ - 结构作为 mex 文件中的初始参数

转载 作者:太空狗 更新时间:2023-10-29 21:44:19 24 4
gpt4 key购买 nike

我在 simulink 中有一个掩码,它有一个初始参数字段。在我的例子中,init 参数是一个结构。现在我想在 .ccp 中使用这个结构(制作一个 mex 文件)。

void init()
{
mxArray *initarg = GetInitArg();
...
}

GetInitArg() 是:

#ifndef GET_INIT_ARG
#define GET_INIT_ARG

mxArray *GetInitArg() {

return rtsys->initArg;

}

#endif

当 initarg 是 int 时,我可以在 void init() 中这样调用它:

int arg = (int)mxGetPr(initarg)[0];

现在,如果 initarg 是一个 Matlab 结构,我该怎么办?

编辑

我尝试使用@remus 回答。

我的结构看起来像这样:

typedef struct
{
const char *task;
aaa_type aaa;
bbb_type bbb;
ccc_type ccc;
} arg_t;

aaa_typebbb_typeccc_type 定义如下:

typedef struct
{
double p1;
double p2;
double p3;
double p4;
double p5;
double p6;
} aaa_type;

我试着像这样获取初始化参数:

void init() 
{
mxArray *initarg = GetInitArg();
arg_t arg* = (arg_t*)mxGetPr(initarg);
...
}

但是在 arg_t 行我遇到了两个编译错误:

error C2143: syntax error : missing ';' before '*' 
error C2059: syntax error : '='

最佳答案

与访问结构相关的 MEX 函数列表如下:

mxGetField
mxSetField
mxGetNumberOfFields
mxGetFieldNameByNumber
mxGetFieldNumber
mxGetFieldByNumber
mxSetFieldByNumber

如果你有一个 1x1 结构,下面是你如何获得其中一个值:

mxArray *field_name = mxGetField(initArg, 0, "field_name");

请注意,结果是另一个 mxArray。从那里您需要通常的 mxGetPr() 用于双数组,或其他 mxGet... 用于其他数据类型。

有关这些函数的 API 详细信息,请参阅有关 C/C++ 矩阵库的 MEX 文档部分:http://www.mathworks.com/help/matlab/cc-mx-matrix-library.html

关于c++ - 结构作为 mex 文件中的初始参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20405150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com