具有外部 C++ 函数的 Matlab:coder.ceval 将结构传递给函数

Matlab with external C++ function: coder.ceval pass a structure to a function

我正在尝试使用 coder.ceval() 和 coder.cstructname() 将结构从 Simulink 中的 Matlab 函数传递到外部 C++ 函数。当我尝试使用 Simulink 中的部署到硬件工具 运行 Arduino Due 板上的代码时,出现错误:

error: invalid use of incomplete type 'struct MyStruct' 
error: forward declaration of 'struct MyStruct'

我使用的是来自 mathworks 的示例代码,但使用的是 c++ 函数而不是 c 函数:

Header use_struct.h:

#include <tmwtypes.h>

typedef struct MyStruct
{
    double s1;
    double s2;
} MyStruct;

void use_struct(struct MyStruct *my_struct);

C++ 函数use_struct.cpp:

 #include <stdio.h>
 #include <stdlib.h>
// #include "use_struct.h"  // Doesn’t work when I include it here


extern “C” void use_struct(struct MyStruct *my_struct)
{
  double x = my_struct->s1;
  double y = my_struct->s2;
}

Matlab函数:

structVar.s1 = 1;
structVar.s2 = 2;

if strcmp(coder.target,'rtw'),


coder.cinclude('use_struct.h');
coder.cstructname(structVar, 'MyStruct', 'extern');

coder.ceval('use_struct', coder.ref(structVar));

end

我需要它作为后面代码的C++函数。然而,我也尝试过使用不带 extern “C” 的 c 函数,但无论如何它都不起作用。谁能帮我解决这个问题?

我找到了解决方案。我必须在 use_struct.cpp 中包括 c header use_struct.h 还包括:

extern "C"
 {
   #include "use_struct.h"
 }