2

例如,我有一个返回结构的 C 外部函数。是否可以将结构返回给 Modelica?

struct point{
   double x;
   double y;
}

struct point return_Struct(double a, double b){
    struct point pt;
    pt.x = a;
    pt.y = b;
    return pt;
};

在 Modelica 中,

function structReturn
  input Real x;
  input Real y;
  output ??????;
external"C" ????? = return_Struct(x,y)
  annotation (Include="#include <cStructReturn.c>");
end structReturn;
4

1 回答 1

3

使用记录并通过引用传递。请参阅12.9.1.3 RecordsModelica 规范中的部分。请注意,记录在 Modelica 工具中的名称可能与您期望的名称不同,因此请将其传递void*并显式转换。使用库而不是包含的 C 文件来隐藏接口,否则代码可能无法编译。

void return_Struct(double a, double b, void* result){
    结构点 *pt = 结果;
    pt->x = a;
    pt->y = b;
};
记录R
  实数 x,y;
结束 R;

函数结构返回
  输入实数 x;
  输入实数y;
  输出 R r;
外部“C” return_Struct(x,y,r)
  注释(库=“cstructreturn”);
结束结构返回;

但我建议将 2 个实数作为外部函数的输出传递,并改为在 Modelica 包装函数中构造记录。

函数多重返回
  输入实数 x;
  输入实数y;
  输出真牛;
  输出Real oy;
外部“C” return_notStruct(x,y,ox,oy)
  注释(库=“cstructreturn”);
结束多次返回;
于 2014-01-08T07:17:03.307 回答