网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi中DLL封装对象的几种方法整理及体会
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

Delphi用DLL来封装对象的技术主要有三种:
用接口实现
用纯虚和抽象类方法实现
用类引用实现
前两种,都是在DLL中生成类实例;第3种通过在调用方生成实例。三种方法的共同局限如下:
调用方只能调用封装类中的virtual方法;
调用方和提供方都必须提供类的描述,接口实现中需要提供接口描述(COM方法例外);
不能创建DLL包含对象的派生类(接口派生除外)。
首先,用接口实现当然包括COM实现,不过由于COM是一种实现接口技术的独立门类,所以在下面说的接口实现中不包括这方面的东西。其次用纯虚和抽象类方法实现,在《Delphi 6 Developer‘s Guide》中提及的inc文件作为公用的头文件,和刘艺在《Delphi面向对象编程思想》中提及的方法本质上是一样的。无非都是为了在调用方加入abstract关键字,而无需方法实现,从而使得编译通过。inc文件的方法是利用宏指令来达到统一处理,不用inc方法是在两处都需要进行描述。
下面用一个例子来展示所以上面提到的集中方法。
调用方主要文件列表为:
UnitMain.pas  调用DLL的界面
UnitPublic.pas  第二种方法在调用端的类描述文件
UnitIDest.pas  接口方法和类引用方法的类描述文件
IncDemo.inc  利用inc文件实现的类描述文件
DLL工程主要文件列表为:
ProDLLDemo.dpr  DLL工程文件
UnitDLLDemo.pas  所有类实现部分的文件
UnitIDest.pas  接口方法和类引用方法的类描述文件
IncDemo.inc  利用inc文件实现的类描述文件
在方法的归纳上如有遗漏,有请指教。
UnitMain.pas 源代码:
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, UnitPublic, UnitIDest;
{$I IncDemo.inc}
// 用于Inc方法的宏指令,如果不是用该方法可去掉上面那行
type
  TfmMain = class(TForm)
    Memo1: TMemo;
    btnUseAbstract: TButton;
    btnUseReference: TButton;
    btnUseInterface: TButton;
    btnUseInc: TButton;
    procedure btnUseAbstractClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnUseInterfaceClick(Sender: TObject);
    procedure btnUseReferenceClick(Sender: TObject);
    procedure btnUseIncClick(Sender: TObject);
    private
  { Private declarations }
    public
  { Public declarations }
  end;
var
  fmMain: TfmMain;
  function GetNewspaper: TNewspaper; external ''ProDLLDemo.dll'';
  function GetCircle: ICircle; external ''ProDLLDemo.dll'';
  function GetBall: TBallClass; external ''ProDLLDemo.dll'';
  function GetCar: TCar; external ''ProDLLDemo.dll'';
implementation
{$R *.dfm}
procedure TfmMain.FormCreate(Sender: TObject);
begin
  memo1.Lines.Clear;
end;
// abstract, virtual 方法示例
procedure TfmMain.btnUseAbstractClick(Sender: TObject);
var
  NewspaperObj: TNewspaper;
  Info: pchar;
  i: integer;
begin
  NewspaperObj := GetNewspaper;
  if NewspaperObj = nil then
    memo1.Lines.Add(''Create newspaper object failed!'')
  else
  begin
    try
      GetMem(Info, 255);
      i := NewspaperObj.Read(Info);
 

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号