1.多语言的Modelica组件批量生成系统,其特征在于,包括批量提取部件、函数分析部件、项目生成部件、函数生成部件、项目编译部件、Modelica组件生成部件;
批量提取部件,从文件夹中批量获取待处理的动态库和头文件原始文件;
函数分析部件,从待处理的头文件中分析得到对应动态库的每个导出函数的返回值类型、函数名称、函数参数列表,函数参数列表包括参数的输入输出类型、参数数据类型、参数名称;
项目生成部件,生成一个新的符合Modelica规范的外部动态库项目,该项目实现对原始动态库的封装调用;
函数生成部件,生成一个符合Modelica使用规范的外部函数,根据原始动态库采用的不同的语言,生成的外部函数具有不同的原型和函数实现代码;
项目编译部件,自动调用系统编译器将新生成的项目及源代码文件编译成符合Modelica使用规范的动态库,完成对动态库工程和源码的编译;
Modelica组件生成部件,为外部函数建立对应的mo文件,生成Modelica组件;
函数生成部件生成符合Modelica使用规范的外部函数的过程包括:
1)在源代码文件中增加对原始动态库头文件的include包含;
2)对函数分析部件输出的每一个原始动态库导出函数原型,在源代码中生成一个新的C语言函数原型,新函数返回值类型为整数int类型;当原函数调用成功返回0;调用不成功返回一个指示错误代码的整数值;新函数名称由原始动态库对应的导出函数的名称转换得到;
功能有关的输入和输出参数统一放入新函数的参数列表中,其中对输入参数在变量前加const修饰;
3)生成由大括号对构成的函数体;
4)在函数体内,根据原始动态采用的编写语言类型,生成不同的执行语句,具体如下:对C或Fortran语言编写的动态库,在函数体内用新生成函数的参数列表中的参数名称作为参数,按照调用约定和参数次序对原始动态库函数进行调用;
对C++语言编写的动态库,在函数体内,首先对原始动态库中的类进行实例化,然后根据导出的方法的参数次序,用新生成函数参数列表中的参数名称作为参数对方法进行调用;
对Matlab语言编写的采用mwArray数据类型的动态库,在函数体内首先为新生成函数参数列表中的每一个参数,生成一个mwArray类型的临时变量,并根据参数组合类型,为新生成的临时变量用不同赋值方式赋值;用临时变量对原始动态库函数进行调用,对调用结果为mwArray类型变量,将mwArray逆向转换为函数原型的参数类型后返回。