我在Matlab中使用一些外部C ++代码,通过 coder.ceval 调用它:
coder.ceval('myCppFuncName', coder.wref(mySruct))
只要myStruct是简单
,这就完美无缺myStruct.a = 0;
myStruct.b = 1;
现在我有一个在C ++头文件struct.h中定义的结构:
typedef struct
{
double x;
double y;
} myPoint;
typedef struct
{
int num_points;
myPoint *points; // pointer to array of myPoint-structs
} myStruct;
我不知道如何在Matlab中表示C ++结构的指针。因为我需要在Matlab中定义结构,我正在尝试这样的事情:
coder.cstructname(matlab_myPoint,'myPoint','extern');
coder.cstructname(matlab_myStruct,'myStruct','extern');
matlab_myPoint= struct('x',0,'y',0);
matlab_myStruct = struct('num_points',2,'points',myPoint);
以错误消息结尾
错误C2440:'=':无法从'myPoint'转换为'myPoint *'
在原始C ++结构中,使用指向结构数组的指针。如何在Matlab出生的结构中重现这种关系?谢谢!
答案 0 :(得分:0)
我最终可以通过不将对象或指针传递给Matlab到C的对象来解决问题,而是交换结构。我的结构中的结构包含了在c中初始化所需类的新对象所需的所有数据。
为了实现这一目标,需要在Matlab和C中使用相同的结构体系结构。
然后用
coder.cstructname(matlab_struct_name,'c_struct_name','extern');
告诉编译器哪个C结构由哪个Matlab结构定义。必须在Simulink属性中指定C-Header文件。
Matlab中C代码的调用最终看起来像这样:
coder.ceval('gateway', 1, coder.ref(matlab_struct_name), ,coder.wref(matlab_myRet));
其中matlab_myRet的创建方式与matlab_struct_name相同,并表示返回值struct。之后在C-Code中写入的所有值都可以在Matlab中获得:
matlab_myRet.x(1:5);
matlab_myRet.y(1:5);
最后使用结构的一个例子:
在Matlab中:
matlab_struct_name.x = 123;
matlab_struct_name.y = 456;
matlab_myRet.x = zeros(10,1);
matlab_myRet.y = zeros(10,1);
在C-Code(标题)中:
typedef struct
{
double x[5];
double y[5];
}matlab_struct_name;
typedef struct
{
double x[10];
double y[10];
}myReturn;
希望这有帮助