2.7.8 外部对象

2.7.8 外部对象

在某些情况下,多个外部函数协作完成某一任务,这些外部函数之间需要传递一些信息的内部内存。在Modelica中,ExternalObject的实例就可以表示这种内部内存。Modelica提供外部对象(external objects)构造、使用和销毁机制。外部对象类(external object class)直接从ExternalObject派生,并且仅有两个函数constructor和destructor,分别用于构造、销毁外部对象。constructor只有一个输出,返回构造的外部对象。destructor没有输出,并且只有一个外部对象作为输入参数,用于销毁该外部对象。这两个函数在Modelica中不能直接调用,constructor在外部对象初始化时自动调用,而destructor在外部对象最后一次使用之后自动调用。外部对象映射为C语言外部函数的“void*”。

Modelica中调用的外部C函数如下定义:

上例Modelica代码中,外部对象table初始化时自动调用constructor函数,constructor函数调用外部函数initMyTable分配内部内存,sumOfTable函数使用外部对象作为参数调用外部函数sumOfMyTable,内部内存传递给sumOfMyTable使用,最后,仿真停止时自动调用destructor函数,destructor函数调用外部函数closeMyTable释放内部内存。