是否可以从外部文件返回多个值到Dymola?

时间:2014-01-07 14:37:07

标签: c modelica dymola

例如,我有一个返回结构的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;

1 个答案:

答案 0 :(得分:3)

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

void return_Struct(double a, double b, void* result){
    struct point *pt = result;
    pt->x = a;
    pt->y = b;
};
record R
  Real x,y;
end R;

function structReturn
  input Real x;
  input Real y;
  output R r;
external"C" return_Struct(x,y,r)
  annotation (Library="cstructreturn");
end structReturn;

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

function multipleReturn
  input Real x;
  input Real y;
  output Real ox;
  output Real oy;
external"C" return_notStruct(x,y,ox,oy)
  annotation (Library="cstructreturn");
end multipleReturn;