正文

(转)有限元动态链接库编程中巧用抽象类2009-03-30 20:05:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/41871.html

分享到:

有限元动态链接库编程中巧用抽象类

 

动态链接库以dll为后缀,软件开发中采用动态链接库有利于开发时的分工、后期维护,以及防止代码泄密。有限元软件架构中,经常会将不同的功能划分为不同的模块,每个模块采用动态链接库来完成。如现有的有限元软件中,常常将计算模块以及图象显示模块设计为动态链接库,在界面程序中调用。

在动态链接库程序开发中,巧用抽象类常常可以起到举足轻重的作用。本文简单讲解在有限元程序开发时,如何在动态链接库中使用抽象类。

 

    举个小例子说明:

 

制作有限元计算模块FemModel链接库,并在程序Main中调用FemModel链接库。

 

先看通常采用的方式,在VC6.0中新建FemModel链接库工程,建立有限元模型输出类FemModel,包含成员为节点数nPoint,函数ReadFile,其中ReadFile函数用来读取文件读取节点数。

 

//FemModel.h

Class __declspec(dllexport) FemModel :  

{

public:

  FemModel();

  virtual ~FemModel();

  void ReadFile(FILE* _ifile);//读取文件,设置节点数

private:

  int nPoint; //节点数

};

FemModel.cpp内容略。

 

    编译工程,生成FemModel.libFemModel.dll文件。

在程序Main中调用FemModel链接库时,需要在工程中导入FemModel.h文件,调用方式如下,

 

#include "FemModel.h"

int main()

{

  FemModel iFem;

  iFem. ReadFile(_ifile);

  return 0;

}

此时,问题就产生了。通常情况下,FemModel链接库和调用程序(程序Main)的开发者为不同的小组,若程序升级时,需要在FemModel类中加入新成员,例如单元数int nElement,其值同样通过ReadFile函数读入。那么,更新完FemModel类后,就必须重新编译界面程序Main。这样就给程序开发带来了不必要的开销。

 

下面介绍如何采用抽象类避免上述问题,

 

抽象类的用途是被继承。定义抽象类就是在类的定义中至少定义一个纯虚函数。纯虚函数的声明形式是在虚函数的后面加上“=0”。

例如virtual void Init() = 0;

 

FemModel链接库中加入文件IFemModel.h,代码如下,

 

//IFemModel.h

class __declspec(dllexport) IFemModel 

{

public:

  void ReadFile(FILE* _ifile)=0;//读取文件,设置节点数

};

__declspec(dllexport) IFemModel* GetFemModelInterface();//全局函数,用来获取IFemModel接口

 

同时FemModel.h文件更新如下,

 

//FemModel.h

#include "IFemModel.h"

Class FemModel : public IFemModel    

{

public:

  FemModel();

  virtual ~FemModel();

  void ReadFile(FILE* _ifile);//读取文件,设置节点数

private:

  int nPoint; //节点数

};

 

在FemModel.cpp内容顶部加入全局函数GetFemModelInterface的实现代码,

 

IFemModel* GetFemModelInterface()

{

  return (IFemModel* )(new FemModel);

}

 

在程序Main中调用FemModel链接库时,在工程中导入IFemModel.h文件(注意不是FemModel.h),调用方式如下,

 

#include "IFemModel.h"

int main()

{

  IFemModel* pIFem;

  pIFem = GetFemModelInterface();

  pIFem-> ReadFile(_ifile);

  //通常还需释放pIFem接口

  return 0;

}

这样,在FemModel类中加入新成员int nElement时,只需要更新FemModel链接库代码,而无需要更新程序Main,从而也无需再重新编译。代码如下,

 

//FemModel.h

#include "IFemModel.h"

Class FemModel : public IFemModel    

{

public:

  FemModel();

  virtual ~FemModel();

  void ReadFile(FILE* _ifile);//读取文件,设置节点数、单元数

private:

  int nPoint; //节点数

  int nElement; //单元数

};

阅读(1918) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册