2016-12-07 110 views
0

我使用一些外部的C++代码内通过Matlab的通过coder.ceval称之为: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

我终于可以通过不传递对象或指针指向Matlab到C中的对象来解决问题,而是交换结构。在我的情况下,结构包含我需要在c中初始化所需类的新对象的所有数据。

为了实现这一需要使用相同的结构架构在Matlab和C.

然后用

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

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

的C代码在Matlab的呼唤终于看起来像这样:

coder.ceval('gateway', 1, coder.ref(matlab_struct_name), ,coder.wref(matlab_myRet)); 
其中matlab_myRet已创建像matlab_struct_name以同样的方式,并表示返回值结构

。被写入到它的C代码中的所有值可以在以后内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; 

希望这有助于