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;
希望对您有所帮助
我正在通过 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;
希望对您有所帮助