coder.ceval 结构需要指针

coder.ceval struct requires pointer

我正在通过 coder.ceval:

调用 Matlab 中的一些外部 C++ 代码
coder.ceval('myCppFuncName', coder.wref(mySruct))

只要 myStruct 是简单的 as

,这就可以完美地工作
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);

以错误消息结尾

error C2440: '=' : cannot convert from 'myPoint' to 'myPoint *'

在原始的 C++ 结构中,使用了指向结构数组的指针。我如何在 Matlab 生成的结构中重现这种关系?谢谢!

我最终可以通过不将 objects 或指向 objects 的指针从 Matlab 传递给 C 而是移交结构来解决问题。在我的例子中,该结构包含我在 c 中初始化所需 class 的新 object 所需的所有数据。

为了实现这一点,需要在 Matlab 和 C 中使用相同的结构体系结构。

然后

coder.cstructname(matlab_struct_name,'c_struct_name','extern');

一个告诉编译器哪个 C 结构由哪个 Matlab 结构定义。 C-Header 文件必须在 Simulink 属性中指定。

Matlab中C-Code的调用最终是这样的:

coder.ceval('gateway', 1, coder.ref(matlab_struct_name), ,coder.wref(matlab_myRet));

其中 matlab_myRet 的创建方式与 matlab_struct_name 相同,代表 return 值结构。在 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 (header):

typedef struct
{
    double                  x[5];
    double                  y[5];
}matlab_struct_name;

    typedef struct
{
    double                  x[10];
    double                  y[10];
}myReturn;

希望对您有所帮助